[英]jqGrid always highlighting first row when using addRowData
一直試圖讓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 只是這樣:
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
的文檔中:
參數
- 行號
- 數據
- position
- srcrowid
描述
插入一個 id = rowid 的新行,其中包含指定 position 處的數據(對象)中的數據(表中的第一個,表中的最后一個或在 srcrowid 中指定的行之前或之后)...
此方法可以一次插入多行。 在這種情況下,數據參數應該是定義為 [{name1:value1,name2: value2…}, {name1:value1,name2: value2…} ] 的數組,第一個選項 rowid 應該包含來自數據 object 的名稱,它應該充當行的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 團隊沒有理由刪除。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.