【问题标题】:How can I hide rows in jqGrid treegrid, triggered after the expandNode event?如何隐藏 jqGrid treegrid 中的行,在 expandNode 事件后触发?
【发布时间】:2013-03-07 22:24:54
【问题描述】:

我有一个有 2 个级别的基本树形网格,我希望隐藏一些行,而其他行可见;我以编程方式使用 $("#" + rowId).hide() 和 $("#" + rowId).show() 执行此操作,因为哪些行可见取决于网格外的数据。那部分工作正常。

但是,当我折叠一个节点然后展开它时,所有子节点都是可见的,即使是我隐藏的那些。显然,jqGrid 几乎只是在行上执行 .hide() 和 .show() ,这否定了我的设置。所以我的想法是在每一行中添加一个隐藏字段来存储它是否应该可见,然后在展开事件之后重新隐藏/显示。问题是,我不确定如何捕获事件并在它之后立即执行代码。

Oleg 在这里展示了一种捕获事件的方法:jqGrid treeGrid catch expand collaps events

不幸的是,这对我不起作用,因为它只会覆盖我在那里所做的任何隐藏/显示。我需要在 jqGrid 函数之后执行代码。关于如何做到这一点的任何想法?

【问题讨论】:

    标签: jqgrid treegrid


    【解决方案1】:

    解决方案对我来说似乎很容易。只需对您引用的the answer 中的代码进行少量修改即可。您可以执行以下操作

    var orgExpandNode = $.fn.jqGrid.expandNode;
    $.jgrid.extend({
        expandNode: function (rc) {
            // here you can insert the code which will be executed
            // before the original expandNode
            var res = orgExpandNode.call(this, rc);
    
            // now you can execute some code after the original expandNode
            // for example the next line hide the node in the grid
            $("#1_1_1").hide(); // hide some row of the grid
    
            return res; // return the value from expandNode
        }
    });
    

    the demo。该演示在 TreeGrid 中有一个节点 id="1_1_1",但它一直处于隐藏状态。

    更新: Free jqGridbeforeExpandRowafterExpandRowbeforeExpandNodeafterExpandNode 回调和 "jqGridTreeGridBeforeExpandRow""jqGridTreeGridAfterExpandRow""jqGridTreeGridBeforeExpandNode""jqGridTreeGridAfterExpandNode" 事件。因此,在使用免费 jqGrid 的情况下,不需要对上述 TreeGrid 方法进行子类化。

    【讨论】:

    • 哇,没想到这一点我几乎觉得有点傻。效果很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-16
    • 2014-09-06
    • 1970-01-01
    • 1970-01-01
    • 2015-06-25
    相关资源
    最近更新 更多