我正在使用jqGrid 4.4.5和工具栏过滤器。网格可以根据条件重新加载(例如收件箱或发件箱字母)。我使用列的选择选项。我需要更改'的选项选项'类型'列。例如,如果网格显示'收件箱字母'然后'选择选项'显示'A,B'否则显示'C,D'。 我使用此代码创建网格:
function creatGrid() {
var inboxSearchOptions = 'A:A;B:B;All:';//inbox Options
var inboxEditOptions = 'A:A;B:B';
var outboxSearchOptions = 'C:C;D:D;ALL:';
var outboxEditOptions = 'C:C;D:D';
grid.jqGrid({
url: 'jqGridHandler.ashx',
datatype: 'json',
width: 100,
height: 200,
colNames: ['Email', 'Subject', 'Type', 'ID'],
colModel: [
{ name: 'Email', width: 100, sortable: false, },
{ name: 'Subject', width: 100, sortable: false, },
{
name: 'Type',
width: 100,
search: true,
formatter: 'select',
edittype: 'select',
editoptions: { value: (($.cookie("calledFrom") == "inbox") ? inboxEditOptions : outboxEditOptions), defaultValue: 'ALL' },
stype: 'select',
searchoptions: { sopt: ['eq', 'ne'], value: (($.cookie("calledFrom") == "inbox") ? inboxSearchOptions : outboxSearchOptions) },
},
{ name: 'ID', width: 100, sortable: false, hidden: true, key: true },
],
rowNum: 20,
loadonce: true,
rowList: [5, 10, 20],
recordpos: "left",
ignoreCase: true,
toppager: true,
viewrecords: true,
multiselect: true,
sortorder: "desc",
scrollOffset: 1,
editurl: 'clientArray',
multiboxonly: true,
jsonReader:
{
repeatitems: false,
},
gridview: true,
}
}
然后我使用此代码重新加载网格:
function doReloadMainGrid() {
switch (($.cookie("calledFrom")) ) {
case "inbox":
{
window.grid.setColProp("Type", {
searchoptions: {
value: inboxSearchOptions,
},
editoptions: {
value: inboxEditOptions
},
});
}
break;
case "outbox":
window.grid.setColProp("Type", {
searchoptions: {
value: outboxSearchOptions,
},
editoptions: {
value: outboxEditOptions
},
});
break;
}
var url = createUrl();
window.grid.setGridParam({ datatype: 'json' });
window.grid.setGridParam({ url: url });
window.grid.trigger("reloadGrid", { current: true });
}
但'setColProp'没有效果。我读this answer但对我来说这不是一个好的解决方案。我错了什么? 提前致谢
答案 0 :(得分:0)
setColProp
不要更改现有过滤器工具栏。如果您只是从Cookie或localStorage
获取值,那么最好在之前执行此操作,将使用filterToolbar
方法创建过滤器工具栏。
您可以使用destroyFilterToolbar
中的新值,使用colModel
重新创建过滤器工具栏。如果你必须使用旧版本的jqGrid,你可以按照the answer来描述如何将代码destroyFilterToolbar
添加到旧版本的jqGrid。