坑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字符串,結果就對了。