2012-04-03 166 views
2

我们在最新版本的jqGrid中使用高级搜索,并且我们的搜索对话框配置为始终在网格上方的页面上可见。我们的数据列表的结构是动态的。因此,当我们要显示一个列表时,我们首先进行ajax调用以获取网格的列表列表。然后,我们为网格构建数据模型并请求数据。jqGrid搜索中的日期范围

当前,在获取列的请求中,我们返回列的数据类型。如果数据是日期,我们会在搜索表单中显示日期选择器。但是,我们的一些客户HATE必须使用< => =来获取日期范围。他们希望能够选择日期列,然后使用两个并排日期选择器设置开始日期和结束日期。我一直在推他们一段时间,因为他们有能力进行日期范围搜索,但抱怨并没有停止。 (这是更多的点击添加第二个过滤器的结束日期)

有没有什么办法可以修改jqGrid给我一个日期范围控制,当我在日期列上配置搜索?我真的不想为了处理这些投诉而设置外部搜索对话框用户界面,但产品管理人员正在努力为网格获取“正常”日期范围。

enter image description here

回答

0

据我所知是没有办法做到这一点,但它写自己。

http://www.trirand.com/jqgridwiki/doku.php?id=wiki:custom_searching

Filter jqGrid Data by Date Range?

+0

我不知道是否有某种回调我可以钩入如果日期列被选中。然后,我可以自动为它们设置第二个过滤器。另外,如果我可以通过某种方式为搜索添加额外的“操作”,以便我可以在用户界面中使用“From”和“To”字样,然后只需在服务器端翻译这些字词即可设置我的查询。 – 2012-04-03 23:24:36

+0

当您选择要搜索的列时,没有事件会触发,也不会在添加搜索行时触发事件。唯一可用的事件描述如下:http://www.trirand.com/jqgridwiki/doku.php?id=wiki:singe_searching#options – Jaco 2012-04-04 06:31:25

1

您可以创建自己的自定义搜索对话框。看到我几天前问过的这个question

使用setGridParam更改您的postData数组,并在filters JSON对象中包含额外的值,该对象将传递到您可以分解它的服务器端。在你的情况下,你可以在的filter项目内传递数据范围StartEnd。然后重新装入您的jqGrid这样

var $grid = $("#list'); 
    //$grid.setGridParam({datatype:'json', page:1}).trigger('reloadGrid'); 
    var post_data = {searchField:'',searchString:'', searchOper:'', 
      filters:'{"groupOp":"OR","rules":['+ 
        '{"field":"Date","op":"ge","data":"2012-04-23"},'+ 
          '{"field":"Date","op":"lt","data":"2012-04-25"}' + 
          ']}' 
    }; 
    $grid.setGridParam({postData:post_data}).trigger('reloadGrid'); 

以上将保存postData数组新的配置和reloadGrid向服务器发送一个请求与新postData阵列。这也将保持分页;但是,要获取网格的旧视图(没有搜索条件),您需要单独实施reset按钮,然后在此之后触发reloadGrid以使其生效。

不确定您现在是否已经解决了您的问题;然而,我将这个解决方案放在这里,对于任何一个来自同一个问题的人来说都是如此。