3

我有一个 jqgrid 使用 loadonce:true 选项加载大量行(以 1000 为单位)。jqgrid加载完成后,用户将在本地对数据进行操作。我在其中一个列上也有一个条件格式,看起来像这样

 cellattr: function(rowId, cellValue, rawObject, cm, rdata) {
     if (rawObject[0]=='Stale'){
    return ' class="stale-highlight"';
     } else if (rawObject[0]=='Not Stale') {
    return ' class="notstale-highlight"';
     } 
 }

它工作正常,除了一旦用户进行排序、过滤等,条件格式就会丢失。

我知道这可能与加载网格后将数据类型更改为本地的 loadonce 选项有关。我该怎么做才能让用户在不轮询 servrr 但仍保留条件格式的情况下对数据进行操作?

谢谢卡斯比

**

更新:

**

我发现了问题。希望它对其他人有用。

为了减少数据大小,我使用这种 json 格式:

{"rows":[{"id":"1","cell":["Not Stale","xxxx","2012-10-16 14:20:59",
                           "110517853","10797445","2012-10-17 08:29:51",
                           "xxxx","2012-10-17 08:33:02", "xxxx",
                           "105954724","xxxxxx","11111.0000",
                           "10000000.0000","10000000.0000"]}]
 ,"page":1,"total":1,"records":"2"} 

三是 json 中没有列名。因此,最初加载网格时,cellattr 中使用的 rawObject 参数是一个值数组(对应于列)。加载网格后,rawObject 变成了一个对象。它包含成对的 column_name:column_value。

因此,我的原始代码仅在初始网格负载期间有效。

cellattr: function(rowId, cellValue, rawObject, cm, rdata) {
     if (rawObject[0]=='Stale'){
      return ' class="stale-highlight"';
      } else if (rawObject[0]=='Not Stale') {
       return ' class="notstale-highlight"';
   } 
}

要解决此问题,我可以看到两个选项:

use the column_name:column_value pairs in the json object and change the cellattr code to reference the rawObject.column_name.

或者

add extra logic to check rawObject.column_name in the cellattr function. it may be less efficient programmingwise but sometime changing input is not that easy

    cellattr: function(rowId, cellValue, rawObject, cm, rdata) 
    { if   (rawObject[0]=='Stale' || rawObject.column_name=='Stale')
       { return ' class="stale-highlight"'; } 
     else if (rawObject[0]=='Not Stale' || rawObject.column_name=='Not Stale') 
       { return ' class="notstale-highlight"'; }

谢谢卡斯比

4

0 回答 0