首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jqGrid:有条件地隐藏/显示列内容**每一行**

jqGrid:有条件地隐藏/显示列内容**每一行**
EN

Stack Overflow用户
提问于 2014-03-13 16:41:22
回答 2查看 4.1K关注 0票数 1

是否有任何方法可以将jqGrid中的列(在我的例子中是Struts2-jQuery-Grid插件3.7.0)仅针对某些行?

例如,仅当第1列值为Movie时,我才希望显示第2列的内容。

代码语言:javascript
复制
 _______________________________________________________
|       COL 1       |               COL 2               |
|===================|===================================|
|   Movie           | bla bla yada yada                 |
|-------------------|-----------------------------------|
|   Song            |                                   |
|-------------------|-----------------------------------|
|   Clip            |                                   |
|-------------------|-----------------------------------|
|   Movie           | foo or bar that is the question...|
|-------------------|-----------------------------------|
|   Game            |                                   |
|___________________|___________________________________|

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

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

注意:我不能简单地从源List中删除内容(这是显而易见的),因为在我的实际示例中,COL 2是一个Boolean,表示为checkbox

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-13 17:43:42

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

代码语言:javascript
复制
.hiddenCell { color: transparent; }

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

代码语言:javascript
复制
cellattr: function (rowId, val, item) {
    if (item.sent) {
        return " class='hiddenCell'";
    }
}

演示演示了该方法。这种方法的缺点-隐藏的文本仍然存在于HTML页面上,所以如果需要的话可以检查它。

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

代码语言:javascript
复制
formatter: function (cellValue, options, item) {
    return item.sent ? "" : $.jgrid.htmlEncode(cellValue);
}

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

代码语言:javascript
复制
formatter: function (cellValue, options, item, action) {
    return item.sent ?
        "" :
        $.fn.fmatter.call(
            this,
            "select",
            cellValue,
            options,
            item,
            action);
}

就像下一个演示

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

票数 3
EN

Stack Overflow用户

发布于 2014-03-14 14:39:48

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

代码语言:javascript
复制
<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>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22385251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档