在表格的前端应用中点击列名进行排序,是一个非常重要的功能,常用的场景比如点击列顺序或者倒序查看销量、库存、用户量等。bootstrap table提供了列的sortable属性来进行排序非常简单,把需要排序的列属性sortable设置成true即可。
注意:这个只是前端排序,比如bootstrap table有10页数据,在第一页你点击销量排序只对当前页的数据起作用。
var columns = [{
field: 'Id',
title: '编号',
sortable:true //设置ID列可以排序
}, {
field: 'ProductName',
title: '产品名称',
sortable:true //设置产品名称列可以排序
}, {
field: 'StockNum',
title: '库存',
sortable:true //设置库存列可以排序
}];
//需要显示的数据
var data = [{
Id: 1,
ProductName: '香蕉',
StockNum: '100'
}, {
Id: 2,
ProductName: '苹果',
StockNum: '200'
}];
//bootstrap table初始化数据
$('#table').bootstrapTable({
columns: columns,
data: data
});
注意:通常我们还是要使用服务器端排序才有意义,因为不可能把所有数据在一页里显示完成。
服务器端排序需要用到以下条件
1,onSort事件,当用户点击列排序时触发的事件,返回列名和排序方式
2,然后通过refreshOptions方法去刷新sortName和sortOrder字段即可
// 设置需要显示的列
var columns = [{
field: 'Id',
title: '编号',
sortable:true /*********第1步,开启排序************/
}, {
field: 'ProductName',
title: '产品名称',
sortable:true
}, {
field: 'StockNum',
title: 'Item 库存',
sortable:true
}];
$('#table').bootstrapTable({
url: '/package/bootstrap-table-1.14.1/data.json', /*****第2步,设置服务器分页地址********/
pagination: true,//开启分页
search: true, //开启刷选
columns: columns,
/*********第3步,定义排序事件************/
onSort:function(name,order)
{
/*********第3步,刷新排序字段和排序方法,完成************/
$('#table').bootstrapTable('refreshOptions', {
sortName:name,
sortOrder:order
});
}
});
有时我们需要对多个字段进行排序如 order by id asc,num desc,name asc ,bootstrap table任何实现这样的排序呢,其实只要在上面的基础上借助queryParams属性即可,代码如下:
// 设置需要显示的列
var columns = [{
field: 'Id',
title: '编号',
sortable:true
}, {
field: 'ProductName',
title: '产品名称',
sortable:true
}, {
field: 'StockNum',
title: 'Item 库存',
sortable:true
}];
$('#table').bootstrapTable({
iquery:{},//定义一个记录排序的对象 ***********
url: '/package/bootstrap-table-1.14.1/data.json',
pagination: true,//开启分页
search: true, //开启刷选
columns: columns,
onSort:function(name,order)
{
$('#table').bootstrapTable('refreshOptions', {
sortName:name,
sortOrder:order
});
},
//把iquery排序字段传给服务器
queryParams:function (params) {
this.iquery[this.sortName]=this.sortOrder;
$.extend(params, this.iquery);
return params
}
});