2

我正在使用jqGrid columnChooser,如下所示:

    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 插件),该处理程序在添加或删除列时触发。所以我想这是一个两部分的问题:

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

关于我想要实现的一些背景:

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

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

谢谢

4

2 回答 2

5

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

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');
            });

    }
});

在此处查看演示。

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

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

于 2012-05-03T21:49:57.020 回答
1

我在 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 
            {
            }
        }
    }
);
    });
}
于 2014-08-11T10:05:48.407 回答