JQGrid MultiSelect过滤器选项基于列';独特价值

JQGrid MultiSelect过滤器选项基于列';独特价值,jqgrid,jquery-multiselect,Jqgrid,Jquery Multiselect,我使用JQGrid和Multiselect过滤器来过滤单个列。 目前,我正在使用数据库主值填充过滤器(例如SkillCategory列) { name: 'SkillCategory', index: 'SkillCategory', width: '5%', sortable: true, resizable: true, stype: 'select', searchoptions: { clearSearch: false, sopt: ['eq', 'ne'],

我使用JQGrid和Multiselect过滤器来过滤单个列。 目前,我正在使用数据库主值填充过滤器(例如SkillCategory列)

{
 name: 'SkillCategory', index: 'SkillCategory', width: '5%', sortable: true, resizable: true, stype: 'select',
  searchoptions: {
  clearSearch: false,
   sopt: ['eq', 'ne'],
    dataUrl: 'HttpHandler/DemandPropertyHandler.ashx?demprop=skillcat',
    buildSelect: createSelectList,
     attr: { multiple: 'multiple', size: 4 },
     position: {
      my: 'left top',
         at: 'left bottom'
        },
     dataInit: dataInitMultiselect
      }
    },
这种方法是将所有可用的主列表(用于SkillCategory)填充到过滤器中。 我只想根据特定列(对于SkillCategory)的可用行中存在的值显示可用的筛选值。 这应该显示“编程”和“数据”作为SkillCategory筛选器的选项,因为行仅包含该列的“编程”和“数据”值

我发现下面的代码(很抱歉忘记了链接)

但它似乎不起作用。仅填充“全部”值。

你知道我怎样才能做到这一点吗

更新1: 根据Oleg的建议,以下是适用于我的工作代码

initializeGridFilterValue = function () {

            //jQuery("#listTableSupply").jqGrid('destroyGroupHeader');
            setSearchSelect("SkillCategory");

            jQuery("#listTableSupply").jqGrid("filterToolbar", {
                stringResult: true,
                searchOnEnter: true,
                defaultSearch: myDefaultSearch,
                beforeClear: function () {
                    $(this.grid.hDiv).find(".ui-search-toolbar .ui-search-input>select[multiple] option").each(function () {
                        this.selected = false; // unselect all options
                    });

                    $(this.grid.hDiv).find(".ui-search-toolbar button.ui-multiselect").each(function () {
                        $(this).prev("select[multiple]").multiselect("refresh");
                    }).css({
                        width: "98%",
                        marginTop: "1px",
                        marginBottom: "1px",
                        paddingTop: "3px"
                    });
                }
            });
            jQuery("#listTableSupply").jqGrid('setGridHeight', 300);
        }
并从loadComplete事件设置它,如下所示:

function loadCompleteHandler1() {
            initializeGridFilterValue();
        }

我看到您使用的代码来自。关于您的问题:我假设您首先调用创建筛选工具栏的
filterToolbar
,然后才调用
setSearchSelect
,设置新的
searchoptions.value
属性。另一个可能的问题是,在将数据加载到网格之前调用
setSearchSelect
。如果将
datatype:“local”
data
参数一起使用,则在创建网格期间,数据将填充到网格中。如果使用
datatype:“json”
则应首先从服务器加载数据,然后在
loadComplete
的内部调用
setSearchSelect
filterToolbar
。例如,如果使用
loadonce:true
,则可以在
loadComplete
中测试
datatype
参数的值。如果值为
“json”
,则您进行了数据的初始加载。因此,您应该调用
setSearchSelect
,然后在需要时调用
destroyFilterToolbar
,最后调用
filterToolbar
,以创建过滤器工具栏,该工具栏将具有所有必需的值。

我使用的是“json”,并更新了我的代码。工作如期进行。我有一个小问题:是否可以从外部按钮重新计算过滤器值?最简单的方法是使用
destroyGroupHeader
销毁过滤器工具栏,然后使用
filterToolbar
再次创建工具栏。如果使用多选插件,您可以更改多选插件将隐藏的
选项,并调用
.Multiselect(“刷新”)initializeGridFilterValue = function () {

            //jQuery("#listTableSupply").jqGrid('destroyGroupHeader');
            setSearchSelect("SkillCategory");

            jQuery("#listTableSupply").jqGrid("filterToolbar", {
                stringResult: true,
                searchOnEnter: true,
                defaultSearch: myDefaultSearch,
                beforeClear: function () {
                    $(this.grid.hDiv).find(".ui-search-toolbar .ui-search-input>select[multiple] option").each(function () {
                        this.selected = false; // unselect all options
                    });

                    $(this.grid.hDiv).find(".ui-search-toolbar button.ui-multiselect").each(function () {
                        $(this).prev("select[multiple]").multiselect("refresh");
                    }).css({
                        width: "98%",
                        marginTop: "1px",
                        marginBottom: "1px",
                        paddingTop: "3px"
                    });
                }
            });
            jQuery("#listTableSupply").jqGrid('setGridHeight', 300);
        }
function loadCompleteHandler1() {
            initializeGridFilterValue();
        }