假设我有以下数据:

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 FebruaryExpense MarchExpense 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/

10-11 14:14