JQgrid从列中保存并恢复对象

时间:2012-10-17 11:32:16

标签: object jqgrid hidden

将复杂的对象保存到列中并在之后恢复它是可行的。

这是一个例子: 杰森:

[{"datamain":"mydata",
       "address":{"data1":15,"data2":0.0,"data3":"1000"}}
}]

的jqGrid:

jQuery("#rowed5").jqGrid({  
        datatype: "local",
        loadtext:"Loading...",
        colNames:['Name',
                  'obaddress'],
        colModel:[
        {name:'datamain',index:'datamain', width:200,editable: true,edittype:'text'},
        {name:'address',index:'address', width:30, editable: false,hidden : true,edittype:'text'}
                ],
        cellsubmit: "clientArray",  
        pager:"#pager"
    });

如果我尝试访问地址:

 var rowData = $("#rowed5").getRowData(rowid);
var myaddress= rowData['address'];

然后我得到'[object Object]'但它是一个字符串!!!我做不到:myaddress.data1

任何建议???

2 个答案:

答案 0 :(得分:3)

如果我正确理解您的问题,您可以执行以下操作:

var rowData = $("#rowed5").jqGrid("getLocalRow", rowid);
alert("data3=" + rowData.address.data3);

顺便保存address部分,您无需创建隐藏列"address"。因此,您不会在表中创建任何隐藏列来保存任何特定于行的自定义数据。您应该像往常一样填充数据:使用jqGrid的data选项:

var mydata = [
    {
        id: "10",
        "datamain": "mydata",
        "address": {"data1": 15, "data2": 0.0, "data3": "1000"}
    },
    {
        id: "20",
        "datamain": "mydata2",
        "address": {"data1": 18, "data2": 0.1, "data3": "3000"}
    }
];

$("#rowed5").jqGrid({
    datatype: "local",
    data: mydata,
    colNames: ['Name'],
    colModel: [
        {name: 'datamain', width: 300, editable: true}
    ],
    height: "auto",
    ...
});

如果所有数据将保存在jqGrid的内部data参数中。您可以使用$("#rowed5").jqGrid("getGridParam", "data")返回所有数据,或使用$("#rowed5").jqGrid("getLocalRow", rowid)仅返回指定行的数据。

The small demo展示了这种方法。数据每页显示一行。因此,您可以转到下一页并使用单元格编辑修改数据。保存后,将显示当前单元格中的“地址”信息。

答案 1 :(得分:0)

我刚解决了这个问题。主要问题是我必须以这种方式加载数据:

        jQuery("#rowed5")
        .jqGrid('setGridParam',
            { 
                datatype: 'local',
                data:mydata
            })
        .trigger("reloadGrid");

您不必这样做:

       jQuery("#rowed5").jqGrid("clearGridData", true);
        for(var i=0;i < data.item.length;i++){
            jQuery("#rowed5").jqGrid('addRowData',i,data.item[i]);
        }