在 jqGrid ColumnChooser 上添加删除列处理程序

Posted

技术标签:

【中文标题】在 jqGrid ColumnChooser 上添加删除列处理程序【英文标题】:Add Remove Column Handler on jqGrid ColumnChooser 【发布时间】:2012-05-13 10:07:55 【问题描述】:

我正在使用jqGridcolumnChooser,就像这样:

    jQuery(grid).jqGrid(
        'navButtonAdd',
        pagerDiv,
        
            caption: "Columns",
            buttonicon: "ui-icon-newwin",
            title: "Hide/Show Columns",
            onClickButton: function () 
                $(this).jqGrid('columnChooser', 
                    done: function (perm) 
                        if (perm) 
                            $(this).jqGrid('remapColumns', perm, true);
                        
                    ,
                    modal: true,
                    width: 400,
                    height: 300,
                    classname: 'column-chooser-select'
                );
            
        
    );

并且想知道是否有一种方法可以在 columnChooser 上指定一个事件处理程序(使用带有 jqGrid 的 jQuery UI Multiselect 插件),该处理程序在添加或删除列时触发。所以我想这是一个两部分的问题:

    jQuery UI Multiselect 是否支持这样的事情? 如果是这样,有没有办法在不改变 jqGrid 源的情况下连接它?

我想要实现的一些背景知识:

我的默认网格配置隐藏了许多列。其中一些列不是从数据库中填充的 - 它们是晦涩的、很少使用的数据元素,如果填充这些元素会显着降低查询执行性能(涉及超过 1 亿条记录的表的多个连接)。

如果用户选择其中一个列进行显示,我想警告他们需要再次往返服务器,这可能需要一段时间 - 并让他们选择取消列添加。

谢谢

【问题讨论】:

【参考方案1】:

我想我理解你的问题并且觉得你的问题很有趣,所以我为你写了一个演示,展示了如何解决这个问题。

columnChooser 在内部使用 jQuery UI Multiselect 插件,该插件使用 jQuery UI Sortable。所以我建议使用 jQuery UI Sortable 的sortreceive 事件来捕获所需的信息。

代码可以如下

$("#grid").jqGrid('navButtonAdd', '#pager', 
    caption: "",
    buttonicon: "ui-icon-calculator",
    title: "Choose columns",
    onClickButton: function () 
        $(this).jqGrid('columnChooser');
        $("#colchooser_" + $.jgrid.jqID(this.id) + " ul.selected")
            .bind("sortreceive", function (event, ui) 
                alert('column "' + ui.item.text() + '" is choosed');
            );
        $("#colchooser_" + $.jgrid.jqID(this.id) + " ul.available a.action")
            .click(function () 
                alert('column "' + $(this).parent().text() + '" is choosed');
            );

    
);

查看演示 here。

代码在对话框初始化时列选择器中的列的initial列表的“+”上绑定'click'事件。我想这对你来说已经足够了。如果需要,您可以轻松修改代码以支持在使用columnChooser 期间从左侧列表中删除的列的“单击”。

我几乎忘了提到我在演示改进版中使用了columnChooser(参见the answer),但我的上述建议也适用于columnChooser 的原始版本。

【讨论】:

谢谢奥列格。这是完美的。 这需要哪些 javascript 插件? @BhavikAmbani:jqGrid 的目录plugins 包含ui.multiselect.cssui.multiselect.js,这是必需的。此外,jQuery UI 也是必需的。 我使用了相同的方法,但现在显示方式不正确。它显示了非常大的列而不是多个选项,如果有,请提供具有完整功能的示例代码。 @BhavikAmbani:您可以在我的回答中找到对the demo 的引用。【参考方案2】:

我在 JqGrid 中使用以下代码作为列选择器插件。当我勾选网格中的全选复选框时。我想排除特定列(默认情况下它不应该显示在我的网格中)。 我在 col 模型中使用了 hidden=True 属性。购买我也想在列选择器中处理这些。

function Properties_Columnchooser() 
    $('#btn_setColumns').click(function () 
        jQuery('#grid-tableProperties').jqGrid('columnChooser',
        "shrinkToFit" : true,
        "autowidth" : true,
        done : function(perm) 
            w = $(window).width();
            // alert('done ' + w);
            if (perm) 
               
                this.jqGrid("remapColumns", perm, true);
                 this.setGridWidth(w - 30, true);

                $('.ui-search-input').show();
             
             else 
            
            
        
    
);
    );

【讨论】:

大家好,谢谢你的建议 :) :)

以上是关于在 jqGrid ColumnChooser 上添加删除列处理程序的主要内容,如果未能解决你的问题,请参考以下文章

如何在寻呼机设置 jqgrid 上添加下一个和上一个按钮

text Wp在任何页面上添加分页

使用 Plotly 在面积图上添加一条具有适当比例的线

Ab Test 衍生功能之锦上添花 —— 目标流量筛选

Ab Test 衍生功能之锦上添花 —— 目标流量筛选

是否可以在 hive 中已分区的表上添加分桶?