2012-02-02 88 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"); 
    }); 
} 

希望這有助於!