2014-04-01 51 views
0

我需要在頁面加載時按特定列進行排序,在這種情況下,請讓它在「RecordDate」上按降序排列顯示初始結果。無法指定數據表的默認列排序javascript

問題是,我相信服務器端阻止任何排序規範,並且我在下面做的任何修改都不會加載結果(asSorting [[列數,嘗試名稱,desc]]等)。

是否有一個特殊的功能,我可以寫,強制此列排序?好奇如果這可以在修改存儲過程或另一個cs文件之前在這裏處理。

function GetRecords(DTO) { 
var grpid = ApplyGroupingOnTable(); 
console.log(grpid); 
oTable = $("#SearchTable").dataTable({ 
    "oLanguage": { 
     "sZeroRecords": "No records to display"//, 
     //"sSearch": "Search on UserName" 
    }, 
    "aLengthMenu": [[10, 25, 50, 100, 150, 250, 500], [10, 25, 50, 100, 150, 250, 500]], 
    "iDisplayLength": 10, 
    "sScrollX": "1300px", 
    "bSortClasses": false, 
    "bStateSave": false, 
    "bFilter": false, 
    "bLengthChange": true, 
    "bPaginate": true, 
    "bAutoWidth": false, 
    "bProcessing": false, 
    "bServerSide": true, 
    "bDestroy": true, 
    "sAjaxSource": "/Data/SearchRecords", 
    "aoColumns": [ 
     { "mData": "SelectID", "sClass": "alternatingCenterAlign", fnRender: CreateSelectCaseViewerButton, "bSortable": false, "bSearchable": false, "sWidth": "18px" }, 
     { "mData": "ViewID", "sClass": "alternatingCenterAlign", fnRender: CreateCaseViewerButton, "bSortable": false, "bSearchable": false, "sWidth": "18px" }, 
     { "mData": "TagID", "sClass": "alternatingCenterAlign", fnRender: CreateTagCaseButton, "bSortable": false, "bSearchable": false, "sWidth": "18px" }, 
     { "mData": "ID", "sClass": "alternating", "sType": "string", "bSortable": true, "bSearchable": false, "sWidth": "50px" }, 
     { "mData": "ClientName", "sClass": "alternating", "sType": "string", "bSortable": true, "sWidth": "120px" }, 
     { "mData": "RecordDate", "sClass": "alternating", "sType": "string", "bSortable": true, "bSearchable": false, "sWidth": "70px" }, 

    "bJQueryUI": false, 
    "sPaginationType": "full_numbers", 
    "bDeferRender": true, 
    "bRetrieve": false, 
    "fnServerParams": function (aoData) { 
     aoData.push({ "name": "iParticipant", "value": $("#participant").val() }); 
     aoData.push({ "name": "iSearch", "value": JSON.stringify(DTO) }); 
     aoData.push({ "name": "iId", "value": cliid }); 
     aoData.push({ "name": "iOrder", "value": grpid }); 
    }, 
    "fnDrawCallback": function (oSettings) { 
     if (grpid) FinalGrouping(oSettings, grpid); 
     $(".overflow").each(function() { $(this).attr('title', $(this).text()); }); 
     $('#tablediv select').chosen(); 
    }, 
    "fnServerData": function (sSource, aoData, fnCallback) { 
     $('.grid-loading').show(); 
     $.ajax({ 
      dataType: 'json', 
      contentType: "application/json; charset=utf-8", 
      type: "GET", 
      url: sSource, 
      data: aoData, 
      cache: false, 
      success: function (msg) { 
       if (msg.Exception != undefined) { 
        alert(msg.Exception); 
        $('.grid-loading').hide(); 
        return false; 
       } 
       lastId = (msg.aaData.length > 0) ? msg.aaData[msg.aaData.length - 1][0] : 0; 
       fnCallback(msg); 
       $('.grid-loading').hide(); 
      } 
     }); //End Ajax Call 
    } 
}); 
} 

回答

1

假設你有機會到DataTable的數據陣列,它的形式爲:

var array = [ 
       { name: "somename", value: "somevalue" }, 
       { name: "somename2", value: "somevalue2" } 
      ]; 

你可以做一個簡單的降序排序基於與值如下:

array.sort(SimpleCompareDescOnValue); 

給定功能:

function SimpleCompareDescOnValue(a, b) { 
     // Use caution so as not to define 'undefined'. It's not a great practice but it works. 
     var c = a.length != undefined ? Math.max.apply(Math, a.map(function (o) { return o.value; })) : a.value; 
     var d = b.length != undefined ? Math.max.apply(Math, b.map(function (o) { return o.value; })) : b.value; 

     if (c > d) 
      return -1; 
     if (c < d) 
      return 1; 
     return 0; 
    } 

不知道這是否對你有所幫助。我從來沒有使用dataTable庫(雖然看起來很酷),但我必須假設你可以在從服務器拉出數據之後訪問數據,並且只有在某些級別將數據存儲在數組中時纔有意義。

+0

感謝您的回覆。我最後不得不將aaSorting屬性修改爲datatables.Jquery中的特定列desc。並在該列上給出'date'的sType。按日期排序desc似乎已經放慢了一點,但這是另一個討論! – cpound