假设我有以下数据:
Name Month Expense
---------- -------------- ----------
XYZ February 10
XYZ March 50
KLM March 20
ABC April 30
按照此SO question中的解决方案,我已经能够创建一个JQGrid实例,该实例的“ Expense”值用列而不是行表示。例如:
Name Expense February Expense March Expense April
--------- ----------------- --------------- --------------
XYZ 30,00 50,00 0,00
KLM 0,00 20,00 0,00
ABC 0,00 0,00 30,00
在我动态构建的
colModel
中,我对每个对象使用相同的index
值动态添加的列,因此每次搜索都会自动重定向到
Expense
字段。这就像一个魅力:)
不幸的是,在搜索对话框中,用户没有在“费用”字段上看到要过滤的单个列,但他有机会过滤分别称为
Expense February
,Expense March
和Expense April
的列,这有点令人困惑,因为他认为这不仅会过滤Expense
属性,还会过滤Month
属性。有什么方法可以指示jqGrid插件隐藏那些不需要的标签,而仅使用称为
Expense
的通用字段吗?非常感谢您的帮助!
编辑:
这是从第一次调用返回的生成对象(它包含colNames和colModel)
{
"ColNames":[
"Name", "Expense February", "Expense March", "Expense April"
],
"ColModel":[
{ "name":"Name", "index":"Name", ... },
{ "name":"Expense1", "index":"Expense", ... },
{ "name":"Expense2", "index":"Expense", ... },
{ "name":"Expense3", "index":"Expense", ... }
]
}
这也是创建网格的代码
$.ajax({
url: 'http://server/GetColumns',
type: "post",
dataType: "json",
data: JSON.stringify({ }),
contentType: "application/json; charset=utf-8",
async: false,
success: function (result) {
if (result) {
var colM = result.ColModel;
var colN = result.ColNames;
grid.jqGrid('GridUnload');
grid.jqGrid({
url: 'http://server/GetData',
datatype: 'json',
mtype: 'post',
colModel: colM,
colNames: colN,
[other params here]
})
}
},
error: function (xhr, ajaxOptions, thrownError) {
[...]
},
complete: function () {
[...]
}
});
最佳答案
似乎您可以只在所有search: false
列中包括ExpenseX
,但列Expense1
除外。在这种情况下,搜索对话框将仅包含一个“费用”列用于搜索。
更新:如果您使用“高级搜索对话框”,则可以相对于afterRedraw回调将“ 2月的费用”更改为“费用”:
afterRedraw: function () {
$(this).find("table.group td.columns option[value=Expense1]").text("Expense");
}
在the demo中,我将来自
colNames
的标准“客户”名称更改为文本“ !!!我的客户名称!!!”:演示中
afterRedraw
的代码更长,只是因为我使用了the demo中的the answer作为模板。它还允许使用Enter键开始搜索。关于jquery - JQGrid动态列和搜索查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9720771/