2013-05-20 35 views
2

我有一個綁定的jqGrid一個服務器端的數據。我只想在點擊排序按鈕時進行本地排序。編程本地排序對服務器數據的jqGrid

我已經這樣做了: 剛剛編輯:獲取完整的數據,然後排序並將其插入到網格中。

編輯

var asc = true; 

$(document).ready(function() { 

    $("span.s-ico").click(function() { 

     var allData = jQuery("#myGrid").jqGrid('getRowData'); 
    if (asc == true) { 
     allData.sort(function (a, b) { 
      if (a.myID> b.myID) return -1; 
      else return 1; 
     }); 
     asc = false; 
    } 
    else { 
     allData.sort(function (a, b) { 
      if (a.myID> b.myID) return 1; 
      else return -1; 
     }); 
     asc = true; 
    } 

    var alt = $.extend(true, [], allData); 

    //alt.shift().shift(); 
    $('#myGrid').jqGrid('setGridParam', { url: null, datatype: 'local' }); 
    $('#myGrid').jqGrid('setGridParam', { data: alt }); 
    $('#myGrid').trigger("reloadGrid"); 
    return false;; 
     //alert("I'm clicked"); 
    }); 

}); 

在其上配置這樣一個jqGrid的:

$("#myGrid").jqGrid({ 
     url: URL, 
     datatype: 'json', 
     mtype: req, 
     ajaxGridOptions: { contentType: 'application/json; charset=utf-8' }, 
     colNames: ['AnotherColumn', 'myID'], 
     colModel: [ 
        { name: 'AnotherColumn', index: 'AnotherColumn', width: 105, sortable: false, editable: true }, 
        { name: 'myID', index: 'myID', sortable: true, width: 185, editable: true } 
       ], 
     rowNum: 100, 
     rowList: [],  
     pgbuttons: false, 
     pgtext: "Page {0} of {1}", 
     pgtext: null, 
     pager: '#myGridPager', 
     sortname: 'myID', 
     viewrecords: false, 
     sortorder: 'asc', 
     sortable: true 
    }); 

回答

3

的一切,如果你想排序第一或搜索/過濾格網數據本地你必須使用index屬性的值在colModel的所有項中的值相同的值爲name屬性。我建議你從列定義中刪除index屬性。目前您使用

{ name: 'AnotherColumn', index: 'Id', ...} 

這是錯誤的。

你有很多其他重要問題。

如果你想排序本地數據,那麼你必須填充第一本地數據。 jqGrid支持data和內部_index選項。通常,本地數據需要在輸入選項data中指定。在這種情況下電網的建設過程中的jqGrid 排序的本地數據,然後顯示數據的第一頁。如果您使用datatype: 'json'loadonce: true那麼內部data參數將在填充網格的顯示頁面期間填充。輸入數據可以包含多個頁面。

如果使用datatype: 'json'沒有loadonce: true選項則沒有data將被填充。所以在datatype更改爲'local'之後,空的data將成爲電網的源,並且使用sortGrid方法的排序將遵循調用populate方法,該方法剛剛重新加載電網。在datatype: 'local'和空data的情況下,你將有空網格。

告訴信任我不明白你的確切要求。如果您沒有太多可以在網格中顯示的總日期(例如少於1000行),則可以使用loadonce: true選項並從URL返回所有數據。數據最初需要排序,或者您可以使用here的技巧。如果你真的有大量的數據(例如磨碎機爲10000行),你必須實現服務器端排序和數據分頁。對小部分(一頁)數據進行排序可能會導致對使用網格的用戶的誤解。

以任何方式,我建議您將gridview: trueautoencode: true選項添加到網格。

+0

我已經編輯我的代碼,使索引和名稱相似。 其實我不能使用'loadonce:true'。我已經實現了其他自定義按鈕,如果我做'loadonce:true',他們正在完全打破自己。 感謝您解釋排序如何工作!但是可以通過任何方式使'loadonce:false'並從服務器加載數據並填充數據字段。 如果我最初使'loadonce:true',然後在第一個網格重新加載並刪除一些行之後我做了'loadonce:false'。然後還顯示舊數據。任何方式來解決它? –

+0

@ soham.m17:你有多少行? 100,1000,100000,...?爲什麼不使用標準方式'loadonce:true'? – Oleg

+0

@ soham.m17:你可以手動填寫原因數據,但你首先需要確定它是正確的。你可以在'loadComplete'或'beforeProcessing'中填充'data'。現在對我來說主要問題是:這是否是正確的方式? – Oleg

相關問題