预填充jqGrid高级搜索过滤器?

时间:2011-05-02 17:12:33

标签: jqgrid

search_config文档页面中,我看到有些东西看起来像是允许我指定一个默认值(defaultValue)来填充搜索字段,但我无法让它工作。我指定了一个默认值,但是当我拉出搜索框时,没有任何内容被填充。此外,我正在使用multipleGroup: true,因此它是高级高级搜索模块,如果这有任何区别。

1 个答案:

答案 0 :(得分:6)

我通过浏览源代码来解决这个问题,因为我似乎无法找到维基或其他任何地方记录的功能,我将回答我自己的问题。 jqGrid有一种创建默认搜索模板的方法,它非常有用。希望我的解释对其他人有用。

在创建jqGrid $('#gridDiv').jqGrid('searchGrid', options);的searchGrid部分时(或在创建navGrid部分$('#gridDiv').jqGrid('navGrid', '#navDiv', {}, {}, {}, {}, searchOptions);时在searchGrid选项部分中),我们关注两个选项,tmplNames和tmplFilters。

tmplNames只是模板名称应该是的字符串数组。这些将显示为将显示的模板选择框中的文本。类似于["Bob's Template", "Joe's Template"]

tmplFilters也是一个字符串数组,但这些字符串是jqGrid在搜索某些内容时发送给php脚本的JSON编码字符串。 (tmplFilters也可以作为对象本身的数组,但我还没试过)所以这样的事情。

{
  "groupOp":"AND",
  "rules":
  [
    {"field":"comnumber","op":"ge","data":"19000"},
    {"field":"expStatus.expStatID","op":"eq","data":"4"}
  ]
}

所以这一切实际上非常简单,除了这仍然不包括设置默认模板。这仅适用于设置其他模板以供选择。 jqGrid有一个预定义的默认模板,这是您最初打开搜索时出现的模板。要更改此项,在创建jqGrid之后,您需要使用setGridParam并更改postdata属性

$('#jqGrid').setGridParam({
    postData: {
      filters: defaultFilter
    }
  });

其中defaultFilter是与以前相同类型的JSON查询字符串。此外,如果单击“重置”按钮,此默认模板将消失,因此您需要在发生这种情况时再次设置它,这很容易通过向初始jqGrid调用添加onReset函数来实现:

onReset: function () {
  $('#jqGrid').setGridParam({
    postData: {
      filters: defaultFilter
    }
  });
}

就是这样!通过使用AJAX和一些新按钮,我还能够从本地文件中读取模板,而不是在javascript中定义它们,并且还能够获取当前查询并在文件中创建/覆盖模板。然后他们变得非常有用。