我已经实现了一个带有服务器端分页,排序和过滤的网格。现在我的用户已经使用所有排序,过滤信息保存了该网格。我已经生成了包含所有这些信息的查询。这意味着,当我再次加载该网格时,我将过滤和排序的数据提供给网格。即使我已经提供了已排序的过滤数据,现在事件也会响应数据库,因为我正在应用过滤和排序属性,如下所示。在这种情况下,如果我在网格中对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。这仅适用于第一次(当带有排序,过滤信息的网格首先加载时)。当用户再次单击过滤器或用户尝试对另一个字段进行排序时,它应该像在服务器端过滤和排序一样工作。
非常感谢任何帮助。
答案 0 :(得分:0)
我自己解决了。
我创建了一个变量并在文档中启动它,如下所示。
var isFilterSortGrid = false;
更改源对象中的排序过滤器函数,如下所示。
sort: function () {
if (isFilterSortGrid) {
$("#jqxgrid").jqxGrid('updatebounddata', 'sort');
}
},
filter: function () {
if (isFilterSortGrid) {
$("#jqxgrid").jqxGrid('updatebounddata', 'filter');
}
}
最后在过滤器和清除按钮中,我再次将该变量设为真。
$(document).on('click', '#filterbuttonjqxgrid', function () {
isFilterSortGrid = true;
});
$(document).on('click', '#filterclearbuttonjqxgrid', function () {
isFilterSortGrid = true;
});
我正常应用过滤器和排序,以便选择过滤器。