是否有任何方法来定位某些行上的jqGrid(在我的例子中,Struts2-jQuery-Grid Plugin 3.7.0)中的列?
例如,我想仅在第1列值 电影 时显示第2列的内容:
_______________________________________________________
| COL 1 | COL 2 |
|===================|===================================|
| Movie | bla bla yada yada |
|-------------------|-----------------------------------|
| Song | |
|-------------------|-----------------------------------|
| Clip | |
|-------------------|-----------------------------------|
| Movie | foo or bar that is the question...|
|-------------------|-----------------------------------|
| Game | |
|___________________|___________________________________|
我已经尝试在GridColumnTag的hidden
和cssClass
字段中使用条件OGNL表达式,但是立即注意到它们对整个列进行了一次评估,而不是在每个& #34;迭代&#34 ;.
作为一种解决方法,我可以在填充网格后用javascript手动隐藏该行中的列,但这是一个黑客,我想知道是否有条件的干净解决方案"做东西"在每行的列上。
注意:我无法简单地删除源List
中的内容(因为这很明显),因为我的实际案例中的COL 2是Boolean
,表示为{{1 }}
答案 0 :(得分:3)
您可以通过多种方式实施要求。其中一个最简单的方法是在需要隐藏的单元格上设置color: transparent;
CSS。例如,您定义CSS规则
.hiddenCell { color: transparent; }
并将类hiddenCell
分配给" COL 2"的指定单元格。您可以使用" COL 2"的cellattr
属性。为它:
cellattr: function (rowId, val, item) {
if (item.sent) {
return " class='hiddenCell'";
}
}
The demo演示了这种方法。方法的缺点 - 隐藏文本仍然存在于HTML页面上,因此可以根据需要进行检查。
另一种方法是使用自定义格式化程序。例如,您可以定义以下formatter
回调
formatter: function (cellValue, options, item) {
return item.sent ? "" : $.jgrid.htmlEncode(cellValue);
}
The demo演示了第二种方法。该方法的缺点 - 将自定义格式化程序的使用与另一个格式化程序(如上例中的formatter: "select"
)相结合有点困难。然而,人们也可以这样做:
formatter: function (cellValue, options, item, action) {
return item.sent ?
"" :
$.fn.fmatter.call(
this,
"select",
cellValue,
options,
item,
action);
}
如果您从服务器加载数据,那么最好的选择可能是修改输入数据(列#34; COL 2"的输入数据)在{ {1}}回调。有关代码示例,请参阅the answer或this one。
答案 1 :(得分:0)
对于记录,问题中描述的(假)场景的解决方案(使用 Struts2-jQuery-Grid 插件而不是原始 jqGrid )将是:
<script>
function conditionalFormatter(cellValue, options, rowObject) {
return rowObject.type!="Movie" ? " " : $.jgrid.htmlEncode(cellValue);
}
</script>
<s:url id="remoteurl" action="myStrutsAction" namespace="/myNamespace" />
<sjg:grid href="%{remoteurl}" dataType="json" gridModel="gridModel" >
<sjg:gridColumn title="Col 1" name="type" />
<sjg:gridColumn title="Col 2" name="foo" formatter="conditionalFormatter" />
</sjg:grid>