一直试图让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代码冲突等)。
答案 0 :(得分:3)
是的,当你说:
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();
...
我没有看到文档中提到的此功能,因此使用它需要您自担风险。但话虽如此,这似乎是一个很好的功能,大概是jqGrid团队没有理由删除。