簡體   English   中英

jqGrid 使用 addRowData 時始終突出顯示第一行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM