【问题标题】:how to change the only one row background in jqgrid如何更改jqgrid中唯一的一行背景
【发布时间】:2018-06-05 14:47:25
【问题描述】:

我将更改基于行的列值的背景颜色。

第一次加载表格,由rowattr完成。

编辑列后,如何在不重新加载表格的情况下根据列更改行背景?

【问题讨论】:

    标签: jquery jqgrid row cell background-color


    【解决方案1】:

    这是数据编辑的已知问题。解决方案取决于 jqGrid 的版本和 fork,使用哪一种,或者使用的编辑模式。

    如果您使用free jqGrid fork,则可以使用afterSetRow 回调,该回调将在任何 行更改(内联或表单编辑)后调用。 afterSetRow的以下代码

    afterSetRow: function (options) {
        if (options.localData.closed) {
            $(options.tr).addClass("ui-state-error ui-state-error-text");
        } else {
            $(options.tr).removeClass("ui-state-error ui-state-error-text");
        }
    }
    

    可以在rowattr之外使用

    rowattr: function (item) {
        if (item.closed) {
            return {
                "class": "ui-state-error ui-state-error-text"
            };
        }
    }
    

    查看演示 https://jsfiddle.net/k5j2ojx2/。您可以尝试通过导航栏的表单编辑或内联编辑按钮(由navGridinlineNav添加)来编辑行内编辑按钮(fomatter: "actions")。如果你改变Closed列的复选框,那么行的颜色也会改变。

    更新:如果您使用单元格编辑,那么您应该使用afterSaveCell 回调。例如,

    afterSaveCell: function (rowid, name, value, iRow, iCol) {
        if (name === "closed") {
            if (value === "true") {
                $(this.rows[iRow]).addClass("ui-state-error ui-state-error-text");
            } else {
                $(this.rows[iRow]).removeClass("ui-state-error ui-state-error-text");
            }
        }
    }
    

    https://jsfiddle.net/k5j2ojx2/1/

    【讨论】:

    • 您好 Oleg,在 afterSaveCell 函数之后似乎没有调用 afterSetRow。我可以在 afterSaveCell 上更新该行的背景吗?
    • @danielparker:您应该更详细地描述您的问题。例如,所有编辑模式(内联编辑、表单编辑和单元格编辑)都使用自己的回调/事件。在单元格编辑的情况下调用afterSaveCell。单元格编辑适用于单元格而不是行,它不会调用setRowData(因此也不会调用afterSetRow)。在单元格编辑的情况下,请参阅我的解决方案的 UPDATED 部分答案。
    猜你喜欢
    • 2011-10-20
    • 2012-10-31
    • 1970-01-01
    • 2015-03-26
    • 1970-01-01
    • 1970-01-01
    • 2013-09-03
    • 2011-11-02
    • 1970-01-01
    相关资源
    最近更新 更多