是否可以为jqgrid列提供动态(非硬编码)搜索过滤器值?
所以在例如:
中 $('#my-grid').jqGrid({
datatype: 'json',
loadonce: true,
jsonReader: common.jqgrid.jsonReader('Workorder'),
mtype: 'POST',
colNames: ['Project', 'PO Number', 'Type', 'Folder'],
colModel: [
{ name: 'Project', index: 'Project', width: 80, sortable: false, search:false},
{ name: 'PONumber', index: 'PONumber', width: 60, sortable: false, search: true },
{ name: 'Type', index: 'Type', width: 60, sortable: false, search: true},
{ name: 'Folder', index: 'Folder', width: 60, sortable: false, search: false },
],
scroll: true,
});
我希望该类型具有一个下拉过滤器,其值是来自数据子集的不同值的数组。
我将如何实现这一目标?
编辑添加:
是直接可访问的jqgrid数据吗?我正在寻找类似的东西
Data.Cols[2].Distinct
将从第3列(在本例中)中提供不同的值数组。这有可能吗?
已更新 这是代码:
onLoadComplete: function (data) {
var $this = $('#gridReport');
if ($this.jqGrid("getGridParam", "datatype") === "json") {
// first loading from the server
// one can construct now DISTINCT for 'Type' column and
// set searchoptions.value
$this.jqGrid("setColProp", "Type", {
stype: "select",
searchoptions: {
value: buildSearchSelect(getUniqueNames("Type")),
sopt: ["eq", "ne"]
}
});
}
},
答案 0 :(得分:2)
我不确定我是否理解正确。您可能希望使用带有下拉列表(stype: 'select'
)的高级搜索对话框,其中包含网格的3维列的不同值?我建议你阅读the answer,其中显示了如何动态设置searchoptions.value
的主要思路。您使用loadonce: true
。因此,您可以在服务器首次加载数据时调用setColProp
内的loadComplete
。您可以对datatype
的值进行其他测试。在从服务器加载时,值为"json"
。稍后它将更改为"local"
。所以代码可以是以下内容:
loadComplete: function () {
var $this = $(this);
if ($this.jqGrid("getGridParam", "datatype") === "json") {
// first loading from the server
// one can construct now DISTINCT for 'Type' column and
// set searchoptions.value
$this.jqGrid("setColProp", "Type", {
stype: "select",
searchoptions: {
value: buildSearchSelect(getUniqueNames("Type")),
sopt: ["eq", "ne"]
}
});
}
}
答案 1 :(得分:0)
这就是我最终做到的方式,我最终使用jquery直接填充下拉列表,因为jqgrid过滤器在任何时候都不可用(如果它们是,我很乐意看到一个记录的示例):
onLoadComplete: function (data) {
if ($('#mygrid').jqGrid("getGridParam", "datatype") === "json") {
//get the distinct types from the data set coming back
var length = data.length;
var types = [];
for (var i = 0; i < length; i++) {
types.push(data[i]['Type']);
}
var uniqueTypes = getUnique(types);
$('#gridId select[name="Type"]').empty().html('<option value="">All</option>');
for (var i = 0; i < uniqueTypes.length; i++) {
$('#gridId select[name="Type"]').append($('<option value="' + uniqueTypes[i] + '">' + uniqueTypes[i] + '</option>'));
}
}