由于要跳过汇总行,所以不能用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