JQGrid MultiSelect过滤器选项基于列';独特价值
我使用JQGrid和Multiselect过滤器来过滤单个列。 目前,我正在使用数据库主值填充过滤器(例如SkillCategory列)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'],
{
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(“刷新”)我的意思是我们需要使用“destroyFilterToolbar”而不是“destroyGroupHeader”。这对我很有用…:)@Oleg:刚才我意识到“var text=$(“#listTableSupply”).jqGrid('getCol',columnName')只给出Page1值,而不是所有页面的值。有没有办法得到完整的列值。得到了答案:
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();
}