gpt4 book ai didi

javascript - jqGrid:根据列名称的行单元格值更改行的背景颜色

转载 作者:数据小太阳 更新时间:2023-10-29 03:48:53 26 4
gpt4 key购买 nike

jqGrid 有一个名为 Posted 的列。它可以放置在不同的位置,具体取决于客户如何配置网格,但始终存在。

如果 Posted 列的值为 True,我需要更改行的背景颜色

我在下面尝试了 colmodel,但 alert(rdata.Posted) 总是显示未定义。

如果此行中的 Posted 列的值为 true,如何更改行的背景颜色?

我研究了很多 Oleg 和其他更改背景颜色的解决方案,但他们使用的是硬编码列号。

colModel: [

{"cellattr":function(rowId, tv, rawObject, cm, rdata) {
if (rdata.Posted)
return 'class="jqgrid-readonlycolumn"';
return '';
}
,"label":"Klient","name":"Klient_nimi","classes":null,"hidden":false},


{"label":null,"name":"Posted","editable":true,"width":0,
"classes":null,"hidden":true}],
...

更新

在 update2 中,Oleg 推荐使用 rowattr。我还需要在操作列中隐藏内联删除按钮和自定义发布按钮。我在 loadComplete 中使用下面的代码。如何使用 rowattr 实现这个?

var LoadCompleteHandler = function () {
var iCol = getColumnIndexByName($grid, 'Kinnitatud'),
postedDateCol = getColumnIndexByName($grid, 'Kinkuup'),
cRows = $grid[0].rows.length,
iRow,
row,
className,
isPosted,
mycell,
mycelldata,
i, count,
cm = $grid.jqGrid('getGridParam', 'colModel'),
l,
iActionsCol = getColumnIndexByName($grid, '_actions');
l = cm.length;
if (iCol > 0 || postedDateCol > 0) {
for (iRow = 0; iRow < cRows; iRow = iRow + 1) {
row = $grid[0].rows[iRow];
className = row.className;
isPosted = false;
if ($.inArray('jqgrow', className.split(' ')) > 0) { // $(row).hasClass('jqgrow')
if (iCol > 0) {
isPosted = $(row.cells[iCol]).find(">div>input:checked").length > 0;
}
if (postedDateCol > 0) {
mycell = row.cells[postedDateCol];
mycelldata = mycell.textContent || mycell.innerText;
isPosted = mycelldata.replace(/^\s+/g, "").replace(/\s+$/g, "") !== "";
}

if (isPosted) {
if ($.inArray('jqgrid-postedrow', className.split(' ')) === -1) {
row.className = className + ' jqgrid-postedrow';
$(row.cells[iActionsCol]).find(">div>div.ui-inline-del").hide();
$(row.cells[iActionsCol]).find(">div>div.ui-inline-post").hide();
}
}
}
}
}

最佳答案

改变行背景颜色的主要思路你会发现herehere .我推荐你阅读 this answer其中讨论了不同方法的不同优点和缺点。

要从列名中获取列索引,您可以使用以下简单函数:

var getColumnIndexByName = function(grid, columnName) {
var cm = grid.jqGrid('getGridParam','colModel'),i=0,l=cm.length;
for (; i<l; i++) {
if (cm[i].name===columnName) {
return i; // return the index
}
}
return -1;
};

函数getColumnIndexByName($("#list"), 'MyColumnName')将为您提供 colModel 中的索引“MyColumnName”列的。

要更改背景颜色,您可以按照示例进行操作

loadComplete: function() {
$("tr.jqgrow:odd").addClass('myAltRowClass');
}

来自 the answer , 而不是 ':odd'过滤器 你可以使用 jQuery.filter 自己编写过滤器.在过滤器内部,您可以使用 :nth-child()从相应的 <td> 访问数据元素(参见 here)

已更新:您可以执行以下操作(非常接近 the another answer 中的代码):

loadComplete: function() {
var iCol = getColumnIndexByName($(this),'closed'),
cRows = this.rows.length, iRow, row, className;

for (iRow=0; iRow<cRows; iRow++) {
row = this.rows[iRow];
className = row.className;
if ($.inArray('jqgrow', className.split(' ')) > 0) {
var x = $(row.cells[iCol]).children("input:checked");
if (x.length>0) {
if ($.inArray('myAltRowClass', className.split(' ')) === -1) {
row.className = className + ' myAltRowClass';
}
}
}
}
}

对应的demo是here .您将看到以下内容:

enter image description here

顺便说一句,如果“关闭”列将被隐藏,一切都将像以前一样继续工作。

更新 2:The answer描述如何使用rowattr回调以简化解决方案并获得最佳性能(在 gridview: true 的情况下)。

关于javascript - jqGrid:根据列名称的行单元格值更改行的背景颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6575192/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com