2012-02-02 3 views
7

У меня есть сетка, для которой я собираю весь набор данных, а затем хочу, чтобы пользователи имели возможность сортировать результирующие данные. Я использую следующие атрибуты, но сетка не сортирует. Также стоит упомянуть, после того, как пользователь нажмет кнопку, я сделаю вызов AJAX, после чего мне нужно будет обновиться от источника, но поскольку я каждый раз вытаскиваю все данные клиенту, мне не нужно идти вернуться к серверу только для сортировки.jqGrid Удаленные данные, Сортировка локально

loadonce: true, // to enable sorting on client side 
sortable: true //to enable sorting 

Любые предложения приветствуются!

ответ

2

Непонятно, в чем проблема: вы можете видеть, но при использовании удаленного источника данных с локальной сортировкой и фильтрацией есть несколько вещей вам необходимо следить за:

  1. Даже если вы сортируете локально, вам по-прежнему необходимо дистанционно сортировать, чтобы загруженные удаленные данные соответствовали текущему состоянию сортировки сетки.
  2. Вы не можете изменить значение loadonce после загрузки сетки, но вы можете изменить значение datatype и принудительно перезагрузить его с сервера. Сетка будет по-прежнему иметь ваш первоначальный url, что вы установили для сетки, так все, что вам нужно запустить это:

    $(this).jqGrid('setGridParam', {datatype:'json'}).trigger('reloadGrid'); 
    
  3. Вы потеряете выбор при перезагрузке из удаленных и даже при сортировке на местном уровне. Чтобы сохранить их, вам нужно будет добавить обработчики, которые сохранят выбор, перезагрузите и затем повторно установите эти параметры.

Вы можете найти более подробную информацию о точно, как сделать все это здесь: http://articles.firstclown.us/post/jqgrid-configuration-for-remote-data-loading-with-local-sorting-and-filtering

3

Я просто заметил, что-то. Параметр loadComplete можно использовать при определении сетки.

    loadComplete: function() { 
            // add a function here that waits for a short amount of time, like 100msecs 
            jQuery("#list1").jqGrid('setGridParam', { 
              datatype:'local', 
              sortname:'name', 
              sortorder:'asc', 
              page:1 
            }).trigger("reloadGrid"); 
        } 

Обратите внимание, что я использую свои данные локально, и когда мне нужно обновление, верните тип данных обратно в xml.

Важно: это само по себе не сработает: перед запуском reloadGrid (выполнение линии) вам потребуется небольшое количество времени. В противном случае вы не увидите разницы в выходе.

1

Мне нужно обновить/загрузить удаленные данные, а все остальные операции выполняются локально. Тогда вот как я нахожу свою потребность.

Подготовка jqGrid с типом данными локального

$("#jqGridView").jqGrid({ 
    //url: originalUrl,// Original line 
    //datatype: "json",// Original line 
    datatype: "local", // For local sorting 
    sortable: true, // I want local sorting for all columns 
    colNames: [...], 
    colModel: [...], 
    //... 
}); 

Затем вызовите эту функцию (перо) загрузки/поиск:

function reloadJqGrid() { 
    var urlForSearch = "xxx"; // modify your search URL (if required) 
    $.get(urlForSearch, function (data) { 
     $("#jqGridView").jqGrid('setGridParam', 
      { 
       datatype: 'local', 
       data: data.Payload //My URL response json is in JSend format, thus storing the array in "data.Payload". You may simply use "data" 
      }) 
      .trigger("reloadGrid"); 
    }); 
} 

Надеется, что это поможет!

Смежные вопросы