Bootstrap结合BootstrapTable的使用,分为两种模试显示列表。
引用的css:
<link href="@Url.Content("~/Css/bootstrap.min.css")" rel="stylesheet" type="text/css" />
<link href="@Url.Content("~/Css/bootstrap-table.css")" rel="stylesheet" type="text/css" />
引用的JS:
<script src="../../Scripts/jquery.js" type="text/javascript"></script>
<script src="../../Scripts/bootstrap.min.js" type="text/javascript"></script>
<script src="../../Scripts/bootstrap-table.js" type="text/javascript"></script>
<script src="../../Scripts/bootstrap-table-zh-CN.js" type="text/javascript"></script>
常用方法:
刷新表格:$table.bootstrapTable(\'refresh\');
获取选择的行:$table.bootstrapTable(\'getSelections\');
1.服务端请求:即当数据量大,千百万条数据的情况下,只获取当页条件下的数据。每点击分页或查询都向服务端重新获取分页数据。
前端代码:
function initTable() {
var queryUrl = \'@Url.Content("~/Welcome/QueryList")\' + \'?rnd=\' + +Math.random();
$table = $(\'#table-javascript\').bootstrapTable({
//method: \'get\',
method: \'post\',
contentType: "application/x-www-form-urlencoded",//必须的,操你大爷!!!!
url: queryUrl,
height: $(window).height() - 200,
striped: true,
pagination: true,
singleSelect: false,
pageSize: 50,
pageList: [10, 50, 100, 200, 500],
search: false, //不显示 搜索框
showColumns: false, //不显示下拉框(选择显示的列)
sidePagination: "server", //服务端请求
queryParams: queryParams,
minimunCountColumns: 2,
columns: [{
field: \'state\',
checkbox: true
}, {
field: \'Name\',
title: \'姓名\',
width: 100,
align: \'center\',
valign: \'middle\',
sortable: true,
formatter: nameFormatter
}, {
field: \'Gender\',
title: \'性别\',
width: 40,
align: \'left\',
valign: \'top\',
sortable: true,
formatter: sexFormatter,
sorter: priceSorter
}, {
field: \'Birthday\',
title: \'出生日期\',
width: 80,
align: \'left\',
valign: \'top\',
sortable: true
}, {
field: \'CtfId\',
title: \'身份证\',
width: 80,
align: \'middle\',
valign: \'top\',
sortable: true
}, {
field: \'Address\',
title: \'地址\',
width: 180,
align: \'left\',
valign: \'top\',
sortable: true
}, {
field: \'Tel\',
title: \'固定电话\',
width: 100,
align: \'left\',
valign: \'top\',
sortable: true
}, {
field: \'Mobile\',
title: \'手机号码\',
width: 100,
align: \'left\',
valign: \'top\',
sortable: true
}, {
field: \'operate\',
title: \'操作\',
width: 100,
align: \'center\',
valign: \'middle\',
formatter: operateFormatter,
events: operateEvents
}],
onLoadSuccess:function(){
},
onLoadError: function () {
mif.showErrorMessageBox("数据加载失败!");
}
});
}
//传递的参数
function queryParams(params) {
return {
pageSize: params.pageSize,
pageIndex: params.pageNumber,
UserName: $("#txtName").val(),
Birthday: $("#txtBirthday").val(),
Gender: $("#Gender").val(),
Address: $("#txtAddress").val(),
name: params.sortName,
order: params.sortOrder
};
}
服务器端代码:
public ActionResult QueryList(int pageIndex = 1, int pageSize = 100)
{
try
{
string name = Request["UserName"];
string birthday = Request["Birthday"];
string gender = Request["Gender"];
string Address = Request["Address"];
Document docQuery = new Document();
if (!string.IsNullOrEmpty(name))
{
docQuery.Add("Name", new MongoRegex(".*" + name + ".*", MongoRegexOption.IgnoreCase));
}
if (!string.IsNullOrEmpty(birthday))
{
docQuery.Add("Birthday", new MongoRegex(".*" + birthday + ".*", MongoRegexOption.IgnoreCase));
}
if (!string.IsNullOrEmpty(gender))
{
docQuery.Add("Gender", gender);
}
if (!string.IsNullOrEmpty(Address))
{
docQuery.Add("Address", new MongoRegex(".*" + Address + ".*", MongoRegexOption.IgnoreCase));
}
if (this.HttpContext.Request.QueryString.AllKeys.Contains("ToExcel"))
{
List<OpenRoom> listExport = MongoDbHelper.GetList<OpenRoom>(MongoTables.OpenRoom, docQuery);
//List<string> listTilte = new List<string> { "" };
ExportMethod(listExport);
}
long totalCount = MongoDbHelper.GetTotalCount<OpenRoom>(MongoTables.OpenRoom, docQuery);
var list = MongoDbHelper.GetList<OpenRoom>(MongoTables.OpenRoom, docQuery, new Document(), pageIndex, pageSize);
string jsonString = JsonHelper.ObjToJson(list);
jsonString = "{\"total\":" + totalCount.ToString() + ",\"rows\":" + jsonString + "}";
return Content(jsonString);
}
catch (Exception ex)
{
return Content(ex.Message);
}
}
注意返回的格式:要返回总记录数total及分页后数据rows。
未解决问题:导出Excel时,超出65536行数据时,会异常。怎样解决这个问题?
2.客户端请求:当数据量较少,只有上千条数据时,一次性将所有数据返回给客户端,无论点下一页,或搜索条件时,不向服务端发请求,实现全文检索。
这个比较简单,将sidePagination属性设为 "client",因为客户端会处理分页和全文检索,无需向服务器端发请求,所以也无需传递参数。
前端JS:
function initTable() {
var queryUrl = \'@Url.Content("~/UserInfo/QueryList")\' + \'?rnd=\' + +Math.random();
$table = $(\'#table-javascript\').bootstrapTable({
method: \'get\',
url: queryUrl,
height: $(window).height() - 200,
striped: true,
pagination: true,
pageSize: 50,
pageList: [10, 25, 50, 100, 200],
search: true,
sidePagination: "client",
showColumns: true,
minimunCountColumns: 2,
columns: [{
field: \'state\',
radio: true
}, {
field: \'Id\',
title: \'ID\',
align: \'right\',
valign: \'bottom\',
sortable: true
}, {
field: \'UserName\',
title: \'姓名\',
width: 100,
align: \'center\',
valign: \'middle\',
sortable: true,
formatter: nameFormatter
}, {
field: \'Account\',
title: \'账号\',
align: \'left\',
valign: \'top\',
sortable: true
}, {
field: \'Address\',
title: \'家乡\',
align: \'middle\',
valign: \'top\',
sortable: true
}, {
field: \'Phone\',
title: \'电话\',
align: \'left\',
valign: \'top\',
sortable: true
}, {
field: \'QQ\',
title: \'QQ号码\',
align: \'left\',
valign: \'top\',
sortable: true
}, {
field: \'Remark\',
title: \'备注\',
align: \'left\',
valign: \'top\',
sortable: true
}, {
field: \'operate\',
title: \'操作\',
align: \'center\',
width: 100,
valign: \'middle\',
formatter: operateFormatter,
events: operateEvents
}]
});
}
后台直接返回Json数据即可。
后台代码:
public ActionResult QueryList()
{
try
{
List<sys_user> list = accessHelper.GetUserList();
string jsonString = JsonHelper.ObjToJson(list);
return Content(jsonString);
}
catch (Exception ex)
{
return Content(ex.Message);
}
}