2

我已经看到了关于这个问题的许多变化,并且我尝试使用所有知识,但仍然没有运气。

我的日期从旧到新排序,我想将它们从新到旧排序。

在您看到 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:&nbsp;&nbsp;</span><span class="value">'+rowData.assname+rowData.assname2+'</span></div>';
      message += '<div class="sectionItem"><span class="label">Amount:&nbsp;&nbsp;</span><span class="value">'+rowData.net_proc+'</span></div>';
      message += '<div class="sectionItem"><span class="label">Transaction Date:&nbsp;&nbsp;</span><span class="value">'+rowData.tran_date+'</span></div>';
      $.popMessage('Transactions Details', message);
      }).addToolTip('Details');
    }
})
    $("#transactionList").setGridParam({datatype: 'json'}).trigger("reloadGrid");
;
4

1 回答 1

1

从您发布的代码中不清楚问题的确切根源。您sortname: 'tran_date', sortorder: 'desc'在发布的代码中使用,但colModel没有名称为 的列'tran_date'

一般来说,理解服务器代码url: "/cc/transaction/show/"+accountId必须返回排序数据很重要。这些选项sortname: 'tran_date', sortorder: 'desc'将用于构建将发送到服务器的值sidx和参数。sord所以服务器必须返回按sidxunsing sordorder 排序的数据。我想您当前的服务器代码不这样做。

更新:服务器应该返回排序的数据。如果真的不可能,您必须在第一次加载后直接使用数据。为此,您可以在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
});
于 2012-12-03T08:39:57.423 回答