视图上的jqGrid隐藏列取决于另一个列值

时间:2014-04-02 13:43:45

标签: jquery jqgrid dependencies

我想根据session的相应行的单元格值显示列type。已隐藏session列。

要隐藏session列,我在下面的代码段中使用了

{ name: 'session', index: 'session', hidden:true, editrules:{edithidden:true} },

所以,我只想在view中显示此列值。如果type单元格值等于Full,我想隐藏session中的view。否则,我想在session中显示view列值。

我尝试使用以下代码,

onSelectRow: function (id) {
    var celValue = $('#statGrid').jqGrid('getCell', id, 'type');
    if (celValue === 'Full') $('#statGrid').jqGrid('getColProp', 'session').editrules.edithidden = false;
    if (celValue === 'Half') $('#statGrid').jqGrid('getColProp', 'session').editrules.edithidden = true;
}

一次,首先if条件成功edithidden属性更改为false。因此,它在视图表单中隐藏session。但是当我的第二个true条件成功时,我无法将该属性更改为if

为什么会这样?这是完成这项任务的正确方法吗?或者有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

我建议您使用View选项的beforeShowFormafterclickPgButtons回调。 The demo证明了这一点。演示了以下代码:

var showIdRow = function ($form) {
        var $this = $(this),
            rowid = $this.jqGrid("getGridParam", "selrow"),
            isClosed = $this.jqGrid("getCell", rowid, "closed");
        if (isClosed === "Yes") {
            $("#trv_id").show(); // "trv_" is the prefix, "id" is the column name
        }
    };

$("#list").jqGrid({
    ....
    colModel: [
        { name: "id", width: 65, hidden: true,  editrules: {edithidden: false} },
        ...
    ]
    ...
}).jqGrid("navGrid", "#pager", {view: true}, {}, {}, {}, {}, {
    recreateForm: true,
    afterclickPgButtons: showIdRow,
    beforeShowForm: showIdRow
});

该演示仅在“查看”表单上显示"id"列,仅在选中“关闭”列中的chechbox时才会显示。