防止RowIds在排序,分页或删除行时重置

时间:2016-06-22 18:03:19

标签: jqgrid

我正在使用jqGrid版本4.6.0

我的问题是一样的 This Question

接受的解决方案是使用主键但我的行没有主键。有没有办法在排序,更改页面或删除行时强制jqgrid具有唯一的行ID?

我遇到的问题是,如果我从5行的网格中删除一个说法的行2,则将3的rowid设置为2,将row4设置为3 ...等等。我希望我的行是唯一的ID,我希望在客户端生成

有关详细信息:我的网格是客户端分页和排序。

以下是我网格示例数据的JsFiddle链接。

testRow = function()
{
   var row2correct =   $("#list").jqGrid('getRowData', 2);//  {meterid:2, DocGroupName: "name2", DocList: "list2", Mandatory: "No"};

   var row6wong =   $("#list").jqGrid('getRowData', 6);// is empty but i was expecting {meterid:4, DocGroupName: "name6", DocList: "ggg", Mandatory: "Yes"}

}
            var mydata = [
                    {meterid:1 , metername: "name1", DocList: "list1", Mandatory: "Yes"},
                    {meterid:2, metername: "name2", DocList: "list2", Mandatory: "No"},
                    {meterid:1, metername: "name3", DocList: "list3", Mandatory: "No"},
                    {meterid:3, metername: "name4", DocList: "list4", Mandatory: "Yes"},
                     {meterid:4, metername: "name5", DocList: "list5", Mandatory: "Yes"},
                      {meterid:4, metername: "name6", DocList: "ggg", Mandatory: "Yes"},
                ];
            $("#list").jqGrid({
                datatype: "local",
                data: mydata,
                height: "auto",
              colNames: ['Meterid', 'metername','Document Name','No of Mandatory'],
                colModel :[
                    {name:'meterid', index:'meterid', width:55},
                    {name:'metername', index:'metername', width:90},
                    {name:'DocList', index:'DocList', width:90, editable: true },                  {name:'Mandatory', index:'Mandatory', width:90, editable: true}                
                ],
                pager: '#pager',
                rowNum:4,
                rowList:[4,8,30],
                sortorder: 'asc',
                viewrecords: true,
                gridview: true
            });

1 个答案:

答案 0 :(得分:1)

您可以添加

var i, l = mydata.length, item;
for (i = 0; i < l; i++) {
    item = mydata[i];
    item.id = String(item.meterid) + "_" + item.metername;
}

在使用mydata作为数据参数的值之前。它应该解决你的主要问题。如果从服务器加载数据,则可以在服务器端分配id或使用beforeProcessing回调来修改从服务器返回的数据,然后jqGrid将处理数据。