jqGrid在第一次加载时排序

我的网格有以下代码(我在与数据源相同的目录中使用XML文件)。

var handsetGrid = $("#products").jqGrid({ url: 'catalog.xml', datatype: "xml", colNames:["SKU", "Name", "Brand", "Description", "Metadescription"], colModel:[ {name:"sku", key: true, index:"sku", width:100, xmlmap:"sku", align:"right", sortable:true}, {name:"Name", index:"Name", width:300, sortable:true, xmlmap:">name>en"}, {name:"Brand", index:"Brand", width:100, sortable:true, xmlmap:"brand"}, {name:"description", index:"description", width:400, classes:"desc1", xmlmap:"description1>en", formatter:descFormatter}, {name:"metadescriptionEn", index:"metadescriptionEn", width:400, classes:"desc1", xmlmap:"metadescription>en", formatter:descFormatter} ], width: 1300, height:480, shrinkToFit:false, rownumbers: true, scroll: true, rowNum:22, ignoreCase: true, viewrecords: true, sortname: "Name", sortorder: "asc", sortable: true, loadonce: true, pager: "#pager", caption: "Handsets", xmlReader: { root: "products", row: "product", repeatitems: false, id: "sku" }, loadComplete: function(data) { // test whether we have initial loadind and the "data" has XML type if (data.nodeType) { myXMLdata = data; // save original XML data } }, subGrid: true, subGridRowExpanded: function(subgrid_id, row_id) { var subgrid_table_id; subgrid_table_id = subgrid_id + "_t"; jQuery("#" + subgrid_id).html("
"); jQuery("#" + subgrid_table_id).jqGrid( { datatype:'xmlstring', datastr: myXMLdata, colNames: [ 'Id', 'Name', 'Duration', 'Price'], colModel: [ {name:"ppid",index:"ppid",width:80, xmlmap:">id"}, {name:"ppname",index:"ppname",width:150, xmlmap:">name>en"}, {name:"ppduration",index:"ppduration",width:85, xmlmap:">priceperduration>duration>en", formatter: durationFormatter}, {name:"ppprice",index:"ppprice",width:80, xmlmap:">priceperduration>price", formatter: priceFormatter} ], gridview: true, xmlReader: { root: "products>product:has('sku:contains('"+row_id+"')')>priceplansavailable", row: "priceplan", repeatitems: false } }); } }); $("#handsets").jqGrid('navGrid','#pager',{edit:false,add:false,del:false,search:false,refresh:false}); $("#handsets").jqGrid('navButtonAdd',"#pager",{caption:"Search Bar", title:"Toggle Search Toolbar", buttonicon :'ui-icon-pin-s', onClickButton:function(){ handsetGrid[0].toggleToolbar(); } }); $("#handsets").jqGrid('navButtonAdd',"#pager",{caption:"Clear", title:"Clear Search", buttonicon :'ui-icon-refresh', onClickButton:function(){ handsetGrid[0].clearToolbar(); } }); $("#handsets").jqGrid('filterToolbar', {defaultSearch:'cn'});

我的问题是当我加载网格时,我希望它已经为列排序:名称。 我期望使用这三个参数:

  • sortname:“名称”,
  • sortorder:“asc”,
  • 可排序的:真的,

单击列后它正常工作,只是第一个排序不起作用(加载页面后)。

如果使用“xml”或“json”之类的远程数据类型, 则服务器负责提供已排序的数据。

如果你不能这样做,你可以在loadComplete触发reloadGrid ,但你应该使用setTimeout JavaScript方法来完成第一个加载过程。

要没有递归,您应该将"reloadGrid"放在loadCompleteif (data.nodeType)块中。

更新: 免费的jqGrid有forceClientSorting: true选项,可以解决问题。 该选项允许在显示第一页之前强制对数据进行排序和过滤(如果设置了可选的postData.filters )。

试试跑步

 handsetgrid.sortGrid("Name"); 

在loadComplete之后