JQGrid:如何基于内容设置单元格样式

JQGrid:如何基于内容设置单元格样式,jqgrid,cell-formatting,Jqgrid,Cell Formatting,我想根据单元格的内容设置单元格的背景色 我的第一个问题:有没有办法从xml数据中设置单元格的背景颜色 如果不是,以下是我的网格定义: $("#grid_sites").jqGrid({ url:"getgridxmlsites.php?detailid=" + $('#hdnStudyDetailId').val(), datatype: "local", height: 160, width: 832, shrinkToFit: true, ca

我想根据单元格的内容设置单元格的背景色

我的第一个问题:有没有办法从xml数据中设置单元格的背景颜色

如果不是,以下是我的网格定义:

$("#grid_sites").jqGrid({
    url:"getgridxmlsites.php?detailid=" + $('#hdnStudyDetailId').val(),
    datatype: "local",
    height: 160,
    width: 832,
    shrinkToFit: true,
    caption:"",
    colNames :["Site","Name","PI","Location","Phone","Status"],
    colModel :[
       {name:"sitenumber",  index:"sitenumber",  width:50,   align:"right"},
       {name:"name",        index:"name",        width:120},
       {name:"location",        index:"location",    width:100},
       {name:"phone",       index:"phone",       width:100},
       {name:"status",      index:"status",      width:70}
    ],
    pager:"pager_sites",
    scroll: 1,
    viewrecords:true,
    sortable:true,
    sortname: "sitenumber",
    autowidth: true,
    pgbuttons: false,
    loadonce: true,
    gridview: true
});
我想根据状态单元格的内容更改其背景颜色。 我知道我可能应该在status列上使用格式化程序,但我不确定该代码是否只更改该单元格的背景色

{name:"status",  index:"status",   width:70, formatter: statusFormatter}

function statusFormatter(cellvalue, options, rowObject)
{
   What exactly would go here for something like this:

   if (cellValue == 'Pending') change the cell's background color to yellow
   else if (cellValue == 'Approved') change the cells's background color to green;
}

谢谢

做你想做的事有很多方法。在中,您将看到一个如何使用自定义格式化程序根据单元格内容更改其背景颜色的示例。答案在引入cellattr属性之前写入。自定义格式化程序的主要目的是基于单元格的数据创建单元格的HTML包含

作为的修改引入的cellattr属性具有优势,因为它只允许设置/修改单元格HTML代码的属性,并使用一些预定义的格式化程序,如“number”或“select”。因此,您可以只设置class或style属性,同时使用一些预定义的格式化程序,这些格式化程序与包含的数据相对应。看看哪个演示了如何在类上动态设置背景色,哪个演示了如何在样式上设置背景色

另外讨论两种方法的优缺点

对代码再加一句话。我不建议您在表单中使用url参数

url:"getgridxmlsites.php?detailid=" + $('#hdnStudyDetailId').val()
它有两个重要的缺点。首先,如果$'hdnstudydetaild.val的包含内容包含一些特殊字符“”、“+”、“=”、“ä”、“ä”和“ä”,则可能会以错误的方式在服务器上发送和解码$'hdnstudydetaild.val電', .... 第二个问题是,“hdnstudydetail”中的值在创建网格时只读取一次。因此,在对网格进行任何刷新时,如按另一列排序、分页等,都将使用来自“hdnstudydetaild”元素的相同旧值。我建议您阅读并使用URL中的URL和postData参数:

url: "getgridxmlsites.php",
postData: {
    detailid: function() { return $('#hdnStudyDetailId').val(); }
}

有很多方法可以做你想做的事。在中,您将看到一个如何使用自定义格式化程序根据单元格内容更改其背景颜色的示例。答案在引入cellattr属性之前写入。自定义格式化程序的主要目的是基于单元格的数据创建单元格的HTML包含

作为的修改引入的cellattr属性具有优势,因为它只允许设置/修改单元格HTML代码的属性,并使用一些预定义的格式化程序,如“number”或“select”。因此,您可以只设置class或style属性,同时使用一些预定义的格式化程序,这些格式化程序与包含的数据相对应。看看哪个演示了如何在类上动态设置背景色,哪个演示了如何在样式上设置背景色

另外讨论两种方法的优缺点

对代码再加一句话。我不建议您在表单中使用url参数

url:"getgridxmlsites.php?detailid=" + $('#hdnStudyDetailId').val()
它有两个重要的缺点。首先,如果$'hdnstudydetaild.val的包含内容包含一些特殊字符“”、“+”、“=”、“ä”、“ä”和“ä”,则可能会以错误的方式在服务器上发送和解码$'hdnstudydetaild.val電', .... 第二个问题是,“hdnstudydetail”中的值在创建网格时只读取一次。因此,在对网格进行任何刷新时,如按另一列排序、分页等,都将使用来自“hdnstudydetaild”元素的相同旧值。我建议您阅读并使用URL中的URL和postData参数:

url: "getgridxmlsites.php",
postData: {
    detailid: function() { return $('#hdnStudyDetailId').val(); }
}

非常感谢您的回复。我可能会使用loadComplete事件和loop-through-all-rows来设置单元格属性。@David Davis:loadComplete内部的loop-through-all-rows的方式总是很慢,因为cellattr或custom Formatter与您已经使用的gridview:true参数一起使用。如果您确实因为其他原因决定使用该循环,请查看哪种描述了实现该循环的相对有效的方法。再次感谢。我再次彻底阅读了你关于使用cellattr的帖子,并尝试了一下,而且更喜欢它。现在我知道了基于内容格式化单个单元格的正确方法。再次非常感谢您的帮助。@David Davis:不客气!如果问题解决了,您可以将答案标记为。非常感谢您的回复。我可能会使用loadComplete事件和loop-through-all-rows来设置单元格属性。@David Davis:loadComplete内部的loop-through-all-rows的方式总是很慢,因为cellattr或custom Formatter与您已经使用的gridview:true参数一起使用。如果您确实因为其他原因决定使用该循环,请查看哪种描述了实现该循环的相对有效的方法。再次感谢。我又仔细阅读了你关于usi的帖子
ng cellattr,尝试了一下,并且更喜欢它。现在我知道了基于内容格式化单个单元格的正确方法。再次非常感谢您的帮助。@David Davis:不客气!如果问题解决了,你可以把答案标记为。