我有一个 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"'; }
谢谢卡斯比