【问题标题】:How to make sub rows for json nested array in jqgrid如何在jqgrid中为json嵌套数组制作子行
【发布时间】:2015-11-08 18:10:39
【问题描述】:

我的本​​地json字符串如下:

var jsonObj = {
        "page": "1",
        "records": "2",
        "rows": [
{"id":"1","firstName":"ABC","lastName":"XYZ","city":"blr","state":"Karnataka","arr":[
{"arr1":"value1","arr2":"value2"},{"arr1":"value3","arr2":"value4"}]},
        {"id":"2","firstName":"DEF","lastName":"PQR","city":"Mumbai","state":"Maharashtra","arr":[{"arr1":"result1","arr2":"result2"},{"arr1":"result3","arr2":"result4"}]}]};

使用jqgrid 我想在两行中显示上面的 json 字符串,具有 id1 和 id2,但是对于嵌套数组(即上面字符串中的 arr)我想将它们显示为它们父行的子行但是不作为子网格。

子行中的其他列应包含作为父行的重复数据,但两列即 arr1 和 arr2 除外。 加载时子行不应该是可见的。点击应该有一个加号/三角形图标,子行应该展开。

这是我用来显示jqgrid的代码。

 $("#list").jqGrid({
                datastr : jsonObj,
                datatype : "jsonstring",
                colNames : [ 'Id', 'FirstName', 'LastName', 'City', 'State', 'Array1', 'Array2' ],
                colModel : [ {
                        name : 'id',
                        index : 'id',
                        width : 100,
                        key : true
                }, {
                        name : 'firstName',
                        index : 'firstName',
                        width : 150

                }, {
                        name : 'lastName',
                        index : 'lastName',
                        width : 150

                }, {
                        name : 'city',
                        index : 'city',
                        width : 100

                }, {
                        name : 'state',
                        index : 'state',
                        width : 100

                }, {
                        name : 'arr1',
                        index : 'arr1',
                        width : 100,
                        jsonmap : "arr.0.arr1"
                }, {

                        name : 'arr2',
                        index : 'arr2',
                        width : 100,
                        jsonmap : "arr.0.arr2"
                } ],
                pager : '#pager',
                rowNum : 10,
                rowList : [ 10, 20, 30 ],
                sortname : 'id',
                sortorder : 'desc',
                viewrecords : true,
                gridview : true,
                caption : 'JSON Array',
                jsonReader : {
                        repeatitems : false, root: "rows"
                }
        });

【问题讨论】:

    标签: jsp jqgrid


    【解决方案1】:

    在我看来,您确实需要将子网格用作网格并根据父字符串的数据创建所需的子网格数据。查看the answer 了解更多详情。就像在引用的答案中一样,您可以使用getLocalRow 和父行ID 来获取父行的所有数据,并且您可以用父行数据中的两项数据填充数组。您可以像在演示中一样隐藏 subgrid 的列标题。

    【讨论】:

    • @Oleg:你提到的答案很有帮助。非常感谢。但是,我在获取子网格中的数据时仍然面临问题。数据:$(this).jqGrid("getLocalRow", pureRowId) 未获取预期数据。我做错什么了吗。很抱歉问了些小问题,但我是 jqgrid 的新手。
    • @Toni:解决方案取决于您使用的 jqGrid 的分支和版本。如果你使用free jqGrid,这是我的fork,那么你可以添加additionalProperties: ["arr"]参数。在这种情况下 jqGrid 将读取数据。或者,您可以使用datatype: "local", data: jsonObj.rows 而不是当前使用的datatype : "jsonstring", datastr: jsonObj。如果本地数据在本地数据中保存arr proparty,$(this).jqGrid("getLocalRow", pureRowId) 将包含arr 属性。所以你可以获取对象并为子网格创建data
    • 再次感谢您的回复。我使用了 datatype : "jsonstring", datastr: jsonobj 这样我就可以在 colModel 中使用 jsonmap 来映射到 arr 内容,即第一行的 value1 和 value2。我想要的是,应该有两行(连同 1-1 sub_rows/sub_grid),第一行应该有 7 列,即 id、firstName、lastName、city、state、arr1、arr2,它们的值应该是 1、ABC、 XYZ,blr,卡纳塔克邦,value1,value2。现在因为 id = 1 的 arr 有两个数组,所以第二行应该显示在子网格中,值为 1、ABC、XYZ、blr、Karnataka、value3、value4。同样对于第二行(和子行)
    • 如果你使用free jqGrid,那么jsonmap也可以在使用datatype: "local"的情况下工作(参见the wiki)。如果您无法迁移到免费的 jqGrid 4.9.2,那么您可以通过将 arr[0].arr1arr[0].arr2 分配为 rows 的每个项目的直接属性来修改输入数据。您只需在创建网格之前包含简单的for 循环。
    猜你喜欢
    • 1970-01-01
    • 2022-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-27
    相关资源
    最近更新 更多