对列进行排序时JqGrid setCell属性丢失
在编辑一行(内联模式)之后,我尝试根据新值更改单元格的一些css属性 通常:编辑一行后,该行中包含字母“D”的所有单元格将使用新的css属性更新单元格:背景色:灰色(使用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
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的处理。