2011-08-16 98 views
1

一直試圖獲取rowID無濟於事,我剛剛意識到在我的代碼中存在一個錯誤,它影響了jqGrid的運行方式。jqGrid總是在使用addRowData時突出顯示第一行

我的代碼如下:

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代碼衝突等)。

回答

3

是的,當你說:

thegrid.addRowData(0,item); 

您在網格中分配各行的0.

相同的ID從文檔addRowData

參數

  • 的rowid
  • 數據
  • 位置
  • srcrowid

說明

插入一個新行與包含在數據中的指定的位置的數據(對象)(第一ID = ROWID在表中,在表中或在srcrowid中指定的行之前或之後)...

此方法可以在一次注入多行。在這種情況下,數據參數應該被數組定義爲 [{name1:value1,name2:value2 ...},{name1:value1,name2:value2 ...}],第一個選項rowid應該包含數據對象的名稱,作爲行的id。在這種情況下,rowid的名稱不應該是colModel的一部分。

由於您一次插入一行(而不是上面提到的多行),因此您需要在調用addRowData時爲每行分配一個唯一ID。我建議您檢索一個唯一的ID爲您的網絡請求的一部分,並且重構你的代碼需要分配ID:

thegrid.addRowData(item.id, item); 

顯然,這是一個問題,如果你沒有在後端的唯一ID - 雖然它可能表明一個更大的設計問題。在任何情況下,如果你不能檢索ID變量,我建議你使用一個臨時的JavaScript變量分配各行不斷增加的ID:

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


更新

由於奧列格指出,你也可以通過undefined作爲ID以允許jqGrid自動生成唯一的ID。您可以從源代碼中grid.base.js相關部分看到這一點:

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

我看不到文檔中提到您自己的風險所以用它這個功能。但是,這表示,這似乎是一個很好的功能,據推測,jqGrid團隊沒有理由刪除。

+0

順便說一句,如果一個人使用'undefined''作爲'addRowData'的第一個參數,那麼該行的id將會根據'$ .jgrid.randId()'生成。 – Oleg

+0

@Oleg - 酷,感謝您指出了!但它關注我這不是文檔wiki的一部分。假定未來版本的jqGrid會保持這個功能?你認爲這應該添加到文檔中嗎? –

+0

我做了一個愚蠢的錯誤,感謝您的幫助,非常感謝,我現在可以確認作品完美。再次感謝。 – JasonMHirst