坑1.分页
使用$('#grid').datagrid({});中的url调用数据查询处理的程序
前提条件:
a. pagination: true
b . var p = grid.datagrid('getPager');
$(p).pagination({
pageSize: 10, //每页显示的记录条数,默认为10
pageList: [10, 15, 20, 30]//可以设置每页记录条数的列表
});
返回数据为{"total":28,"rows":[ { } , { } ] }这种形式就可以产生分页效果,在后台处理程序中获取page、rows参数,数据库查询语句采用分页语句
获取page,rows:
var page = context.Request["page"];
var rows = context.Request["rows"];
page = (page == null ? "" : page);
rows = (rows == null ? "" : rows);
int p = int.Parse(page);
int r = int.Parse(rows);
“坑”在:我的数据加载是基于查询按钮的,初始打开页面是不加载数据的,输入日期等条件点击查询按钮,返回json数据用loadData加载,数据可以加载成功,但是后台获取不到page,rows参数。而上述过程是基于datagrid直接用url加载数据产生的分页,由于分页是直接作用于datagrid上,所以通过datagrid自身的url可以实现分页并能获取到分页数据。
而我是外界给datagrid的数据,所以不会对其自身的分页产生效果。
解决方法:查询时仍然用datagrid的url ,而不用loadData去加载查询出的json数据,并用queryParams传递查询用到的参数
查询按钮调用的方法为queryData,createParam是form表单中的数据
function queryData() {
var param = createParam($("#dForm"));
$('#grid').datagrid({
url: "CheckData.ashx?action=query&id=day",
queryParams: param
});
}
坑2:queryParams总是为空
queryParams是object类型,虽然表现为{ },类似于json,但是切不可用json字符串代替,若上述的方法中queryParams的数据param为json字符串,那么后台将不能获取。
function createParam(form) {
var query = form.serializeArray();
query = convertArray(query);
// return JSON.stringify(query);
return query;
}
function convertArray(o) {
var v = {};
for (var i in o) {
if (o[i].name != '__VIEWSTATE') {
if (typeof (v[o[i].name]) == 'undefined')
v[o[i].name] = o[i].value;
else
v[o[i].name] += "," + o[i].value;
}
}
return v;
}
上述方法将表单数据序列化为json,我调用createParam方法将表单数据封装成json类型,处理后作为queryParams参数传送,可是传到后台总为空,经多次测试,js的数据就是queryParams应该有的传输形式,后来注意到queryParams虽表现为json形式,但实质上是object,于是我将JSON.stringify(query)注释掉,返回的不再是json字符串,结果就对了。