我在这个问题上看到了很多变化,我试图利用所有的知识,但仍然没有运气。
我的日期从旧到新排序,我想把它们换成旧的。
你看到desc,我试过asc,但没有改变。
当我尝试分页时,它似乎触发了重新加载,排序是正确的,从新到旧。
是设置重新加载1秒和清除间隔的最佳解决方案吗?或者我还有其他错误吗?
我不能对服务器端进行排序,这不是一个选项。
$("#transactionList").jqGrid({
url: "/cc/transaction/show/"+accountId,
datatype: "local",
autowidth: true,
height: 'auto',
sortname: 'tran_date',
sortorder: 'desc',
sortable:true,
loadonce:true,
viewrecords: true,
gridview: true,
firstsortorder: 'desc',
colNames:['Date','Asset Name','Description','Amount','Actions'],
colModel:[
{name:'tran_date',index:'tran_date',sorttype:'date',sortable:true,formatter:'date',firstsororder: 'desc',datefmt: 'M d,Y',formatoptions: {srcformat:'Y-m-d H:i:s',newformat:'M d,Y'}},
{name:'assname',index:'assname',sortable:true,resizable:false},
{name:'desccription',index:'desccription',sortable:true,resizable:false},
{name:'net_proc', index:'net_proc',align:'right',formatter:'currency',formatoptions{decimalSeparator:".", thousandsSeparator: ",", decimalPlaces: 2, prefix: "$", defaultValue:'0.00'}, sortable:true,resizable:false}, {name:'ID',index:'ID',formatter:actionsFormatter,width:130,align:"center",key:true,resizable:false}
],
caption: "Completed Transactions",
rowTotal: -1,
rowNum: 1000,
rowList: [10,20,30],
pager: '#pager',
onSelectRow: function(row_id) {
},
jsonReader: {
repeatitems: false,
id: "ID",
userdata: 'rows'
},
viewrecords: true,
gridComplete: function() {
//Attach action event handlers
$('span[name="details"]').click(function() {
var row_id = this.id;
var data = $("#transactionList").getGridParam('userData');
var rowData;
$.each(data, function(index,el){
if(el.ID==row_id)
rowData = el;
});
var message = '<div class="sectionItem"><span class="label">Asset Name: </span><span class="value">'+rowData.assname+rowData.assname2+'</span></div>';
message += '<div class="sectionItem"><span class="label">Amount: </span><span class="value">'+rowData.net_proc+'</span></div>';
message += '<div class="sectionItem"><span class="label">Transaction Date: </span><span class="value">'+rowData.tran_date+'</span></div>';
$.popMessage('Transactions Details', message);
}).addToolTip('Details');
}
})
$("#transactionList").setGridParam({datatype: 'json'}).trigger("reloadGrid");
;
答案 0 :(得分:1)
问题的确切根源在您发布的代码中并不明确。您在发布的代码中使用sortname: 'tran_date', sortorder: 'desc'
,但colModel
没有名称为'tran_date'
的列。
一般来说,了解服务器代码url: "/cc/transaction/show/"+accountId
必须返回已排序数据非常重要。选项sortname: 'tran_date', sortorder: 'desc'
将用于构建将发送到服务器的sidx
和sord
参数的值。因此,服务器必须返回按sidx
unsing sord
顺序排序的数据。我想您当前的服务器代码不会这样做。
更新:服务器应返回已排序的数据。如果它真的不可能,你必须在第一次加载后直接求助数据。为此,您可以在loadComplete
回调内部测试是否第一次加载数据 。在第一次加载时,datatype
的值是原始值"json"
或"xml"
,具体取决于从服务器返回的数据的格式。之后datatype
将更改为"local"
。因此,如果datatype
选项的值不是"local"
,则可以触发"reloadGrid"
。相应的代码可能如下所示
$("#transactionList").jqGrid({
url: "/cc/transaction/show/" + accountId,
datatype: "json",
rowNum: 1, // initial small value
loadonce: true,
loadComplete: function () {
var $this = $(this);
if ($this.jqGrid("getGridParam", "datatype") !== "local") {
setTimeout(function () {
$this.jqGrid("setGridParam", { rowNum: 20 }); // the real value
$this.trigger("reloadGrid");
}, 50);
}
},
... // other options which you need
});