0

有没有办法访问 jqGrid 的 columnChooser 的多选 API 对象?我需要调用这些对象来更新 ColumnChooser 弹出对话框中的数据。

在下面的快照中,是自定义的 ColumnChooser 弹出对话框。选择/更改时的 HTML 组合将更改 $ui.multiselect 部分(可用和不可用列)。

在下面的第二个快照中是使用 Firefox 的萤火虫的视图源,它没有让我切换 2 列的选项。

有没有办法访问 ColumnChooser 的 API,手动切换 ColumnChooser 上的列但不触摸 jqGrid 的列?我怎样才能做到这一点?

谢谢...

[快照#1]... 在此处输入图像描述 [快照#2]... 在此处输入图像描述

4

1 回答 1

0

在谷歌浏览了几天之后,从大量示例 api 中拼凑出示例脚本,并提出了 JQuery 来查找可点击锚链接的 html 路径。

更新的解决方案

“parmSavedBuildDataFormValueColumnModelSetting”值是您传递给它的 colModel 的名称,无论是您从数据库或 cookie 中保存的值,还是用于填充 MultiSelect“选定”框窗口的任何值。

        function JqgridColumnChooserSavedBuildsRecordsMultiselectDialogToggler(parmSavedBuildDataFormValueColumnModelSetting) {
            //Re-order the $.ui.multiselect's columns in 2 boxed-windows (available & unavailable)...
            //http://stackoverflow.com/questions/10439072/add-remove-column-handler-on-jqgrid-columnchooser
            //http://stackoverflow.com/questions/11526893/jqgrid-columnchooser-unselected-columns-on-the-right-in-alphabetical-order
            var $jqgridColumModelSetting = $('#' + jqgridSpreadsheetId).jqGrid('getGridParam', 'colModel');
            var $jqgridColumNameSetting = $('#' + jqgridSpreadsheetId).jqGrid('getGridParam', 'colNames');

            //Remove all of the "selected" columns having "-" icon...
           //09/11/2013 - This "selected" columns with hyperlink click event does not work too well as it cause 1/3 of all columns not to be visible, so let' use the "Remove All" hyperlink instead...
            //#$('#colchooser_' + jqgridSpreadsheetId + ' ul.selected a.action').click();
            $('#colchooser_' + jqgridSpreadsheetId + ' div.ui-multiselect div.selected a.remove-all').click();

            //Add back the "available" columns having "+" icon, only the one that match the SavedBuilds data...
            $.each(parmSavedBuildDataFormValueColumnModelSetting.split('|'), function (i1, o1) {  //##parmSavedBuildDataFormValueColumnModelSetting.forEach(function (i, o) {
                $.each($jqgridColumModelSetting, function (i2, o2) {
                    if (o2.name == o1) {
                        $('#colchooser_' + jqgridSpreadsheetId + ' ul.available li[title="' + $jqgridColumNameSetting[i2] + '"] a.action').click();
                        return false;  //This only break the foreach loop [while "return true" resume the loop] (This have nothing to do with function's returned value)...
                    }
                });
            });
        }
于 2013-09-13T12:59:05.850 回答