2012-10-17 56 views
4

將複雜對象保存到列中並在其後恢復它是可行的。JQgrid保存並從列中恢復對象

這是一個例子: JSON:

[{"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" 
    }); 

如果我嘗試訪問ADDRES:

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

然後我得到「的翻譯: '但它是一個字符串!我做不到:myaddress.data1

任何推薦?

回答

3

如果我正確理解你的問題,你可以做到以下幾點:

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

通過保存address部分你不需要創建隱藏的列"address"的方式。所以你不會在表中創建任何隱藏的列來保存任何行特定的自定義數據。你應該只填寫數據像你一樣通常是:使用data選項的jqGrid的:

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演示現場的方法。數據每頁顯示一行。因此,您可以轉到下一頁並使用單元格編輯修改數據。保存當前單元格的「地址」信息後將顯示。

+0

我只是解決了這個問題。主要proble是,我有上加載這樣的數據:\t \t \t的jQuery( 「#rowed5」) \t \t .jqGrid( 'setGridParam', \t \t { \t \t數據類型: '本地', \t \t data:mydata \t \t}) \t \t .trigger(「reloadGrid」); – Rafael

+1

正確調用「getLocalRow」方法。這將對象返回給返回字符串的「getRowData」。謝謝。 – styfle

+0

@styfle:不客氣! 'getLocalRow'和內部'data'和'_index'的其他優點如下:如果'mydata'包含附加屬性,將會以與輸入數據完全相同的格式進行保存。所以不需要隱藏的列,甚至可以保存與行關聯的複雜對象。請參閱[答案](http:// stackoverflow。com/a/13241406/315935)和[答案](http://stackoverflow.com/a/13779589/315935)嵌套的子網格信息將保存在'data'中,並使用'getLocalRow'訪問。 – Oleg

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]); 
     }