1

没有办法只在某些行上定位 jqGrid 中的列(在我的情况下,Struts2-jQuery-Grid Plugin 3.7.0)?

例如,我只想在第 1 列值为Movie时才显示第 2 列的内容:

 _______________________________________________________
|       COL 1       |               COL 2               |
|===================|===================================|
|   Movie           | bla bla yada yada                 |
|-------------------|-----------------------------------|
|   Song            |                                   |
|-------------------|-----------------------------------|
|   Clip            |                                   |
|-------------------|-----------------------------------|
|   Movie           | foo or bar that is the question...|
|-------------------|-----------------------------------|
|   Game            |                                   |
|___________________|___________________________________|

我尝试在GridColumnTaghiddencssClass字段中使用条件 OGNL 表达式,但立即注意到它们针对整个列计算一次,而不是每次“迭代”。

作为一种解决方法,我可以在填充网格后使用 javascript 手动隐藏该行中的列,但这是一个 hack,我想知道是否有一个干净的解决方案可以有条件地在每行列上“做某事” .

注意:我不能简单地从源中删除内容List(因为这很明显),因为在我的真实案例中 COL 2 是 a Boolean,表示为checkbox

4

2 回答 2

3

有很多方法可以实现需求。最简单的方法之一是在color: transparent;需要隐藏的单元格上设置 CSS。例如,您定义 CSS 规则

.hiddenCell { color: transparent; }

并将类分配给hiddenCell“COL 2”的指定单元格。您可以cellattr为它使用“COL 2”的属性:

cellattr: function (rowId, val, item) {
    if (item.sent) {
        return " class='hiddenCell'";
    }
}

该演示演示了该方法。该方法的缺点 - 隐藏文本仍然存在于 HTML 页面上,因此可以在需要时对其进行检查。

另一种方法是使用自定义格式化程序。例如,您可以定义以下formatter回调

formatter: function (cellValue, options, item) {
    return item.sent ? "" : $.jgrid.htmlEncode(cellValue);
}

该演示演示了第二种方法。该方法的缺点 - 将自定义格式化程序的使用与另一个格式化程序结合起来有点困难(如formatter: "select"上面的示例)。不过也可以这样做:

formatter: function (cellValue, options, item, action) {
    return item.sent ?
        "" :
        $.fn.fmatter.call(
            this,
            "select",
            cellValue,
            options,
            item,
            action);
}

喜欢下一个演示

如果您从服务器加载数据,那么最好的选择可能是在回调中修改输入数据(“COL 2”列的输入数据) 。beforeProcessing有关代码示例,请参见答案这个

于 2014-03-13T17:43:42.500 回答
0

对于记录,问题中描述的(假)场景的解决方案(使用Struts2-jQuery-Grid Plugin 而不是原始jqGrid)将是:

<script>
   function conditionalFormatter(cellValue, options, rowObject) {
       return rowObject.type!="Movie" ? "&nbsp;" : $.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>
于 2014-03-14T14:39:48.303 回答