由於要跳過彙總行,所以不能用Easyui自帶的排序方法,所以寫了此方法實現;除了跳過指定行以外,還可以擴展,定義列排序的方法;
使用了冒泡排序。
$(".datagrid-cell").click(function () {
var sort = $(this).parent("td").attr("field"); //取點擊排序的列對應字段值
var fileter = "DtpName"; //過濾此字段不進行排序
if (fileter.indexOf(sort) >= 0) { return false; };
var thissort = $(this).attr("sort");
if (thissort == "asc") {
$(".datagrid-cell").removeAttr("sort");
$(this).attr("sort", "desc");
thissort = "desc";
$(".datagrid-cell").removeClass("datagrid-sort-asc"); //處理點擊列頭時的小三角樣式
$(this).addClass("datagrid-sort-desc");
}
else {
$(".datagrid-cell").removeAttr("sort");
$(this).attr("sort", "asc");
thissort = "asc";
$(".datagrid-cell").removeClass("datagrid-sort-desc");
$(this).addClass("datagrid-sort-asc");
}
var olddata = $('#StoreTB').datagrid("getData").rows;
for (var i = 0; i < olddata.length - 1; i++) {
for (var j = 0; j < olddata.length - 1 - i; j++) {
if (olddata[j]["DtpName"] == "彙總") //跳過彙總行
continue;
if (sort == "MonthlyACosGrowthRate") { //此列值是計算後得出的,所以要特殊處理
var ratej = (olddata[j].ACOS - olddata[j].ACOSLastWeek) / olddata[j].ACOSLastWeek;
var ratej1 = (olddata[j + 1].ACOS - olddata[j + 1].ACOSLastWeek) / olddata[j + 1].ACOSLastWeek;
if ((thissort == "asc" && parseFloat(ratej) >= parseFloat(ratej1)) || (thissort == "desc" && parseFloat(ratej) <= parseFloat(ratej1)) || !ratej) {
var temp = olddata[j + 1];
olddata[j + 1] = olddata[j];
olddata[j] = temp;
}
}
else if ((thissort == "asc" && parseFloat(olddata[j][sort]) >= parseFloat(olddata[j + 1][sort])) || (thissort == "desc" && parseFloat(olddata[j][sort]) <= parseFloat(olddata[j + 1][sort]))) {
var temp = olddata[j + 1];
olddata[j + 1] = olddata[j];
olddata[j] = temp;
}
}
}
$('#StoreTB').datagrid("loadData", { rows: olddata, total: olddata.length });
});
注:表格屬性 remoteSort和列屬性sortable都設置成false