显示过滤器,使用服务器端事件在jQWidget JQX网格中排序信息

时间:2015-12-23 11:06:55

标签: sorting filtering server-side jqxgrid jqwidget

我已经实现了一个带有服务器端分页,排序和过滤的网格。现在我的用户已经使用所有排序,过滤信息保存了该网格。我已经生成了包含所有这些信息的查询。这意味着,当我再次加载该网格时,我将过滤和排序的数据提供给网格。即使我已经提供了已排序的过滤数据,现在事件也会响应数据库,因为我正在应用过滤和排序属性,如下所示。在这种情况下,如果我在网格中对7个字段进行了排序,则会在DB上进行8次(7个用于应用过滤器,1个用于第一次加载网格)。这会产生很多性能问题。

 $(openFrom + "#jqxgrid").jqxGrid('sortby', sessionStorage.getItem("GridSortColumn"), sortdirectionvalue);

 $(openFrom + "#jqxgrid").jqxGrid('addfilter', currentColumnFilterValue['columnname'], filterGroup);
 $(openFrom + "#jqxgrid").jqxGrid('applyfilters');

这是我的源对象。

var source =
                  {
                      datafields: DataFields,
                      datatype: "json",
                      async: false,//If it is true, server side filtering and sorting won't work together
                      url: '../Widget/GetDataForGrid/',
                      type: 'POST',
                      sort: function () {
                      },
                      filter: function () {
                      },
                      beforeprocessing: function (data) {
                      }
                  };

所以我的要求是,我只需要显示过滤器,在网格中排序选择而不需要DB。这仅适用于第一次(当带有排序,过滤信息的网格首先加载时)。当用户再次单击过滤器或用户尝试对另一个字段进行排序时,它应该像在服务器端过滤和排序一样工作。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

我自己解决了。

  1. 我创建了一个变量并在文档中启动它,如下所示。

    var isFilterSortGrid = false; 
    
  2. 更改源对象中的排序过滤器函数,如下所示。

    sort: function () {
                          if (isFilterSortGrid) {
                              $("#jqxgrid").jqxGrid('updatebounddata', 'sort');
                          }
                      },
    filter: function () {
                          if (isFilterSortGrid) {
                              $("#jqxgrid").jqxGrid('updatebounddata', 'filter');
                          }
                      }
    
  3. 最后在过滤器和清除按钮中,我再次将该变量设为真。

    $(document).on('click', '#filterbuttonjqxgrid', function () {
      isFilterSortGrid = true;
    });
    
    $(document).on('click', '#filterclearbuttonjqxgrid', function () {
     isFilterSortGrid = true;
    });
    

    我正常应用过滤器和排序,以便选择过滤器。