对列进行排序时JqGrid setCell属性丢失

对列进行排序时JqGrid setCell属性丢失,jqgrid,Jqgrid,在编辑一行(内联模式)之后,我尝试根据新值更改单元格的一些css属性 通常:编辑一行后,该行中包含字母“D”的所有单元格将使用新的css属性更新单元格:背景色:灰色(使用setCell方法) 为此,我使用内联编辑: grid.jqGrid('navGrid',"#pager",{edit:false, add:false, del:false}); grid.jqGrid('inlineNav',"#pager",{edit:true, add:false, del:false, editPar

在编辑一行(内联模式)之后,我尝试根据新值更改单元格的一些css属性

通常:编辑一行后,该行中包含字母“D”的所有单元格将使用新的css属性更新单元格:背景色:灰色(使用setCell方法)

为此,我使用内联编辑:

grid.jqGrid('navGrid',"#pager",{edit:false, add:false, del:false});
grid.jqGrid('inlineNav',"#pager",{edit:true, add:false, del:false, editParams: myEditParam});
对于编辑后更改背景,我使用aftersavefunc方法

myEditParam :
...
    aftersavefunc: function(rowId, dataFromServer)
    {
      var rowData = $("#list").jqGrid("getRowData", rowId);
      for (var key in rowData)
      {
        if (rowData[key] == "D")
        {
          key++;
          $("#list").jqGrid("setCell",rowId, key, "", {"background-color": "#ECECEC"}  );
        }
      }
    },
...
这段代码可以工作,但不幸的是,当我对网格的一列进行排序时,setCell方法没有得到保留!(单元格失去了背景色:灰色)

是否有更好的方法可以在编辑新值后更改背景


谢谢你的帮助;)

我建议将样式从该事件中删除,并将其移到下面更一般的功能中。如果未应用该样式,则始终可以在编辑后的代码中触发jqGrid上的刷新

下面的函数将检查每个列单元格值,如果TestValue匹配,则将类添加到行中

    rowattr: function (rd) {
           if (rd.ColumnName == TestValue) { return {"class": "RowBoldClass"}; }//if
    },
和匹配的类

RowBoldClass { font-weight:bold; .....

我的回答来自

如果您真的需要更改列中可以显示值“D”的单元格的格式/颜色/样式,那么您应该使用
cellatr
(请参阅或)

如果需要更改行的格式/颜色/样式,则应使用
rowattr
(请参阅)

需要了解的一点很重要:行编辑结束时既不会调用
cellatr
也不会调用
rowattr
。因此,您仍然必须使用
aftersavefunc
callback

当前的
aftersavefunc
代码让我觉得有点奇怪。首先,我从未要求根据值在网格的任何列中标记值(在您的情况下为“D”)。通常,只需测试特定列的值,然后标记该单元格或行中的其他单元格

在任何情况下,通常不需要在值为“D”的情况下添加类,而是在值不是“D”的情况下删除类

我从修改了演示以支持内联编辑(应该使用双击开始编辑,然后按Enter停止编辑)除了在旧演示中使用的
cellattr
之外,还使用了以下
aftersavefunc
代码:

aftersavefunc:函数(rowId){
var closed=$(this).jqGrid(“getCell”,rowId,“closed”),indexOfColumn;
如果(关闭==“是”){
//将CSS类添加到用于标记的单元格中
$(this).jqGrid(“setCell”,rowId,“name”,”,
“ui状态错误ui状态错误文本”);
}否则{
//从用于标记的单元格中删除CSS类
indexOfColumn=getColumnIndexByName.call(这是“名称”);
$(this.rows.namedItem(rowId.cells[indexOfColumn])
.removeClass(“ui状态错误ui状态错误文本”);
}
}

您是只希望单元格值在编辑后具有CSS样式,还是任何包含具有特定值的单元格的行都应该具有这种不同的样式?@Mark:实际上,所有包含具有特定值的单元格的行都应该具有这种不同的样式。我测试了。。。您在哪里申报RowBlodClass?在样式文件ui.jqgrid.css中?thx寻求帮助;)您的项目可以访问CSS文件的任何地方,它都不必位于ui.jqgrid.CSS文件中。我可以使用json来检索列名列表,并在上面循环以应用代码no?@bigburgr:我不知道你的意思。列可以动态构造,但只有一行(或只有部分行)具有特殊含义,其中值
“D”
具有特殊含义。因此,您可以从服务器加载有关所有网格列的信息,这些信息可以包含在服务器响应附加字段中:可以容纳
“D”
的列的名称。您只需要测试
“D”
的列,而不是所有列。下一个问题是,如果用户将“D”修改为另一个值,您应该从单元格中删除
背景色
CSS样式。Thx Oleg为您提供帮助,我成功使用了cellattr方法,条件是(cellValue==“D”)为了考虑编辑模式中的新数据,我在aftersavefunc方法中加入了trigger.reload。@Bigburger:不客气!如果在您的情况下在其他回调函数(如
aftersavefunc
)中使用
.trigger(“reloadGrid”)
,则应将
.trigger(“reloadGrid”)
放在
setTimeout
中。它允许jqGrid完成当前事件的处理(称为
aftersavefunc
)并在其之后开始重新加载Grid的处理。