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

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

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

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

所以,我只想在view显示此列值。 如果type cell value等于Full ,我想在view隐藏session 。 否则,我想在view显示该session列值。

我尝试使用下面的代码,

 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 。 因此,它以Viewforms隐藏session 。 但是当我的第二个if条件成功时,我无法将该属性更改为true

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

我建议你使用beforeShowFormafterclickPgButtons回调View选项。 演示演示了它。 演示以下代码:

 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"查看”表单上显示"id"列,仅在检查“关闭”列中的chechbox时才显示。