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

时间:2011-08-16 13:06:51

标签: javascript jquery ajax 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代码冲突等)。

1 个答案:

答案 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团队没有理由删除。