jqgrid客户端排序desc / asc

时间:2012-12-03 05:03:31

标签: jqgrid

我在这个问题上看到了很多变化,我试图利用所有的知识,但仍然没有运气。

我的日期从旧到新排序,我想把它们换成旧的。

你看到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");
;

1 个答案:

答案 0 :(得分:1)

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

一般来说,了解服务器代码url: "/cc/transaction/show/"+accountId必须返回已排序数据非常重要。选项sortname: 'tran_date', sortorder: 'desc'将用于构建将发送到服务器的sidxsord参数的值。因此,服务器必须返回按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
});