4

複雑なオブジェクトをカラムに保存し、後でそれを回復することが可能です。

これは例です: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

任意の推奨事項???

4

2 に答える 2

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",
    ...
});

この場合、すべてのデータdataはjqGridの内部パラメーターに保存されます。を使用$("#rowed5").jqGrid("getGridParam", "data")してすべてのデータ $("#rowed5").jqGrid("getLocalRow", rowid)を返すか、を使用して指定した行のデータのみを返すことができます。

小さなデモは、アプローチをライブで示します。データはページごとに1行表示されます。したがって、次のページに移動して、セル編集を使用してデータを変更できます。保存後、現在のセルの「アドレス」情報が表示されます。

于 2012-10-17T12:16:00.960 に答える
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]);
        }
于 2012-10-17T14:08:55.947 に答える