控制器方法:
public JsonResult SyncGetTmpData(int rows = 0, int page = 0)
{
try
{
string where = null;
string order = null;
if (Request.Form["where"] != null) where = Request.Form["where"];
if (Request.Form["order"] != null) order = Request.Form["order"];
string dbSetId = Request.Form["dbSetId"];
DataSet ds = new SyncImpl().GetTmpData(dbSetId, where, order, rows, page);
var result = new
{
db = DAL.Common.DataGrid(ds),
meta = DAL.Common.DataGrid(ds.Tables[2])
};
return Json(DAL.Common.Msg(AjaxStatu.ok, result));
}
catch (Exception e)
{
return Json(DAL.Common.Msg(AjaxStatu.err, e.Message));
}
}
这个控制器返回的数据格式为:
{"status":1,"data":{"db":{"total":3,"rows":[{"id":12,"provincename":"北京","rn":1},{"id":1,"provincename":"广东","rn":2},{"id":3,"provincename":"广西","rn":3}]},"meta":{"total":2,"rows":[{"fieldname":"id","isprimarykey":1,"name":"省份ID","remark":null,"isunique":0,"length":"4","datatype":2,"defaultvalue":null,"setid":"103e3041c7e64d47a08112e46b900045","id":"1b990e4a2e554404a4d5992aefddaed8","isindex":0,"isallownull":1,"ordernumber":0},{"fieldname":"provincename","isprimarykey":0,"name":"省份名称","remark":null,"isunique":0,"length":"20","datatype":1,"defaultvalue":null,"setid":"103e3041c7e64d47a08112e46b900045","id":"b3e9d0200879436a933b45e85176935c","isindex":0,"isallownull":1,"ordernumber":1}]}}}
其中:db为datagrid数据源格式,meta为表结构.
js 方法:
function getTmpData(dbSetId, r, p) {
var rows = 50;
var page = 1;
if (r) rows = r;
if (p) page = p;
$.post('/DataCenter/DBC/SyncGetTmpData', { dbSetId: dbSetId, rows: rows, page: page }, function (data) {
accecpResult(data, function () {
var ds = data.data.db.rows;
var meta = data.data.meta.rows;
if (ds.length < 0) {
myalert('未获取到数据');
return;
}
var columns = [[{field:'rn',title:'行号',align:'center'}]];
for (i = 0; i < meta.length; i++) {
columns[0][i+1] = { field: meta[i].fieldname.toLowerCase(), title: meta[i].name };
}
tab_sync_srcDb.datagrid({
data: data.data.db,
columns: columns,
striped: true,
fit: true,
border: false,
pagination: true,
pageSize: 50
});
var p = tab_sync_srcDb.datagrid('getPager');
(p).pagination({
pageNumber:page,
beforePageText: '第',
afterPageText: '页 共 {pages} 页',
displayMsg: '共{total}条数据',
onSelectPage: function (pageNumber, pageSize) {
getTmpData(dbSetId, pageSize, pageNumber);
}
});
});
});
}
jquery每次都是获取数据后再解析出数据,然后动态的创建列,分页控件也需要在事件中处理一下,datagrid不能加rownumbers属性,否则每页的行号都是从1开始的,只要加一个行号列,将数据源中的行号显示出来就行了。