使用addRowData时,jqGrid始终突出显示第一行

试图让rowID无济于事,我突然意识到我的代码中有一个错误影响了jqGrid的运行方式。

我的代码如下:

function showSearchResults(k1,k2,k3,k4,k5){ jQuery("#list2").jqGrid( { datatype: function(pdata) { getData(pdata,k1,k2,k3,k4,k5); }, colNames:['title','section','Year','Month', 'Page', 'rank', k1,k2,k3,k4,k5], colModel:[ {name:'title',index:'title', width:300}, {name:'section',index:'section', width:100}, {name:'yearEdition',index:'yearEdition', width:60, align:"center"}, {name:'monthEdition',index:'monthEdition', width:60, align:"center"}, {name:'pageNumber',index:'pageNumber', width:60, align:"center"}, {name:'rank',index:'rank', width:100, align:"center"}, {name:'keyword1',index:'keyword1', width:100, align:"center"}, {name:'keyword2',index:'keyword2', width:100, align:"center"}, {name:'keyword3',index:'keyword3', width:100,align:"center"}, {name:'keyword4',index:'keyword4', width:100,align:"center"}, {name:'keyword5',index:'keyword5', width:100,align:"center"} ], rowNum:10, rowList:[10,20,30], pager: '#pager2', sortname: 'id', viewrecords: true, sortorder: "desc", loadonce:true, caption:"Results" }); jQuery("#list2").jqGrid('navGrid','#pager2',{edit:false,add:false,del:false}); 

GetData函数仅仅是这样的:

 function getData(pdata,keyword1,keyword2,keyword3,keyword4,keyword5) { $.getJSON('addresshere?callback=?', { k1:keyword1, k2:keyword2, k3:keyword3, k4:keyword4, k5:keyword5, async:false }, function (data) { var a = JSON.parse(data); if (a.length != 0) { $.each(a, function (index, item) { var thegrid = jQuery("#list2"); thegrid.addRowData(0,item); }); } }); } 

从WebService返回行,填充网格都可以正常工作,但无论我在哪里点击网格,第一行总是突出显示。

是否有任何明显或任何已知问题(如字段名称与jsGrid代码冲突等)。

是的,当你说:

 thegrid.addRowData(0,item); 

您正在为网格中的每一行指定相同的ID 0。

addRowData的文档:

参数

  • ROWID
  • 数据
  • 位置
  • srcrowid

描述

插入一个id = rowid的新行,其中包含指定位置的数据(对象)中的数据(表中的第一个,表中的最后一个或srcrowid中指定的行之前或之后)…

此方法可以一次插入多行。 在这种情况下,data参数应该是数组定义为[{name1:value1,name2:value2 …},{name1:value1,name2:value2 …}],第一个选项rowid应该包含数据对象的名称,该名称应该作为行的id。 在这种情况下,rowid的名称不必是colModel的一部分。

由于您一次插入一行(而不是如上所述的多行),因此在调用addRowData时需要为每一行分配唯一的ID。 我建议您在Web请求中检索唯一ID,并根据需要重构代码以分配ID:

  thegrid.addRowData(item.id, item); 

显然,如果您在后端没有唯一的ID,则会出现问题 – 尽管这可能表明存在更大的设计问题。 在任何情况下,如果您无法检索ID变量,我建议您使用临时JavaScript变量为每行分配不断增加的ID:

 var counter = 0; ... thegrid.addRowData(counter, item); counter++; ... 

更新

正如Oleg所指出的,您还可以将undefined作为ID传递,以允许jqGrid自动生成唯一ID。 您可以从grid.base.js中的源代码的相关部分看到这一点:

 if(typeof(rowid) != 'undefined') { rowid = rowid+"";} else { rowid = $.jgrid.randId(); ... 

我没有看到文档中提到的此function,因此使用它需要您自担风险。 但话虽如此,这似乎是一个很好的function,大概是jqGrid团队没有理由删除。