2013-05-20 19 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

相关问题