Показать фильтр, сортировку информации в сетке jQWidget JQX с событиями на стороне сервера

Я реализовал сетку с разбивкой на страницы, сортировкой, фильтрацией на стороне сервера. Теперь мой пользователь сохранил эту сетку со всей информацией для сортировки и фильтрации. Я создал запрос со всей этой информацией. Это означает, что когда я снова загружаю эту сетку, я передаю ей отфильтрованные и отсортированные данные. Несмотря на то, что я предоставил отсортированные отфильтрованные данные, теперь события попадают в БД, поскольку я применяю свойства фильтрации и сортировки, как показано ниже. В этой ситуации, если я отсортировал 7 полей в сетке, он попадает в БД 8 раз (7 для применения фильтра и одно для загрузки сетки в первый раз). Это создает так много проблем с производительностью.

 $(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) {
                      }
                  };

Итак, мое требование: мне просто нужно показать фильтр, отсортировать выбор в сетке, не переходя в БД. Это применимо только в первый раз (когда сначала загружается сетка с отсортированной отфильтрованной информацией). И когда пользователь снова щелкает фильтр или пользователь пытается отсортировать другое поле, оно должно работать как при фильтрации и сортировке на стороне сервера.

Любая помощь горячо приветствуется.


person Sibeesh Venu    schedule 23.12.2015    source источник


Ответы (1)


Я сам решил.

  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;
    });
    

    Я применяю фильтр и сортировку как обычно, так что выбор фильтра будет там.

person Sibeesh Venu    schedule 24.12.2015