jqgrid 簡單學(xué)習(xí)筆記
JqGrid文檔:http://www.trirand.com/jqgridwiki/doku.php?id=wiki:jqgriddocs
JqGrid Demo:http://trirand.com/blog/jqgrid/jqgrid.html#t107
JqGrid的基礎(chǔ),我這里就不做介紹了,不知道的可以去看看博客園或Google,最好去看文檔。先看效果圖:
本Demo可以查詢、修改、分組。新增、刪除等一些基本功能都可以去JqGrid Demo中找到。
邏輯思路:第一次加載本年度的經(jīng)營計劃數(shù)據(jù),加載完成后,將JqGrid設(shè)置成本地數(shù)據(jù),這樣分頁、數(shù)據(jù)查詢都成customs。只能修改本月以后的計劃,在afterShowForm和afterclickPgButtons做驗證,如果時間小于等于本月,這將提交按鈕設(shè)置成disabled。否則提交按鈕可以使用。在提交服務(wù)器前,需要將JqGrid的datatype設(shè)置成json,否則不會請求服務(wù)器。
本Demo只做了2010、2011、2012年三個靜態(tài)數(shù)據(jù)源,修改數(shù)據(jù)只做了返回信息,并沒修改數(shù)據(jù)源數(shù)據(jù)。
Apsx頁面代碼:
<table id="jqgridlist">
</table>
<div id="pager">
</div>
Javascript中JqGrid的配置代碼:
jQuery("#jqgridlist").jqGrid({ url: 'DataHandler.ashx',
datatype: function (pdata) {
$.ajax({ url: 'DataHandler.ashx',
dataType: "json", type: "post",
contentType: "application/x-www-form-urlencoded; charset=utf-8",
data: pdata,
error: function (data, status, statusText) {
if (!(status == 200 && statusText == "parsererror"))
alert("客服端解析數(shù)據(jù)錯誤!\n請與管理員聯(lián)系");
else
alert"請求服務(wù)器錯誤!\n請稍后再試或與管理員聯(lián)系");
},
complete: function (jsondata, stat) {
if (stat == "success") {
var thegrid = jQuery("#jqgridlist")[0],
data = eval("(" + jsondata.responseText + ")");
thegrid.addJSONData(data);
data = null;
jsondata = null;
}
}
});
},
colNames: ["行號", "日期期間", "c_code", "單位名稱", "銷售回款", "營業(yè)收入", "工業(yè)總產(chǎn)值", "利潤總額", "上交稅金"],
colModel: [{ name: "ROWNUM", index: "ROWNUM", editable: false, summaryType: 'count',
summaryTpl: '({0}) total'
},
{ name: "JHQJ", index: "JHQJ", editable: true, stype: 'text', search: true, searchoptions: { sopt: ['eq'] },
editoptions: { style: "border:0; background-color:transparent;" }
},
{ name: "C_CODE", index: "C_CODE", sortable: false, editable: true, search: false, hidden: true,
editrules: { edithidden: false }, editoptions: { style: "border:0; background-color:transparent;" }
},
{ name: "DWJC", index: "DWJC", editable: true, search: true, stype: 'text', searchoptions: { sopt: ['cn'] },
editoptions: { style: "border:0; background-color:transparent;" }
},
{ name: "a21", index: "a21", editable: true, search: true, editrules: { number: true },
formatter: 'currency', summaryType: 'sum'
},
{ name: "a22", index: "a22", editable: true, search: true, editrules: { number: true },
formatter: 'currency', summaryType: 'sum'
},
{ name: "a23", index: "a23", editable: true, search: true, editrules: { number: true },
formatter: 'currency', summaryType: 'sum'
},
{ name: "a24", index: "a24", editable: true, search: true, editrules: { number: true },
formatter: 'currency', summaryType: 'sum'
},
{ name: "a25", index: "a25", editable: true, search: true, editrules: { number: true },
formatter: 'currency', summaryType: 'sum'
}
],
height: 400,
autowidth: true,
width: 700,
rowNum: 70,
rowTotal: 1300,
rowList: [13, 70, 100],
rownumbers: false,
loadonce: true,
loadtext: '載入中...',
forceFit: true,
gridview: true,
pager: '#pager',
sortname: 'ROWNUM',
scroll: 0,
page: 1,
viewrecords: true,
editurl: 'DataHandler.ashx',
sortorder: "asc",
jsonReader: {
root: "rows",
page: "page",
total: "total",
records: "records",
repeatitems: false
},
grouping: false,
groupingView: {
groupField: ['DWJC'],
groupColumnShow: [true],
groupText: ['<b>{0}</b>'],
groupCollapse: false,
groupOrder: ['asc'],
groupSummary: [false],
groupDataSorted: true
},
gridComplete: function () {
$("#jqgridlist").setGridParam({ datatype: 'local' });
},
caption: "<table><tr><td>分組:<select id='chngroup'> <option value='clear'>清除分組</option> <option value='DWJC'>單位名稱</option><option value='JHQJ'>日期期間</option></select></td><td><div class='slider'><div class='slider_context'><ul></ul></div><div class='btn_pre'> </div><div class='btn_next'> </div></div></div></td></tr></table>"
});
對一些屬性做一個解釋:
datatype:如果設(shè)置成json ,那么請求的數(shù)據(jù)是json格式。而且每次增刪查改操作,都會請求服務(wù)器。
如果設(shè)置成local ,那么所有操作都將在是客服端完成,不發(fā)送到服務(wù)器。
如果設(shè)置成函數(shù)(見本示例),每次獲取數(shù)據(jù),都會經(jīng)過本函數(shù)處理一次。
可以通過調(diào)試JS代碼,來驗證。
rownumbers: 設(shè)置成false,就不顯示行號;否則反之
loadonce: 設(shè)置成true,表示一次性導(dǎo)入數(shù)據(jù);默認(rèn)為false
rowTotal: 表色一次性導(dǎo)入數(shù)據(jù)的最大行數(shù)。
jsonReader:配置與服務(wù)器端返回的數(shù)據(jù)做相關(guān)對應(yīng),詳細(xì)情況見文檔:http://www.trirand.com/jqgridwiki/doku.php?id=wiki:retrieving_data
gridComplete:全部數(shù)據(jù)加載完成并且其他所有處理事件完成時觸發(fā)。英文文檔解釋:This fires after all the data is loaded into the grid and all other processes are complete. Also the event fires independent from the datatype parameter and after sorting paging and etc.如果你只是數(shù)據(jù)加載完成時就需要觸發(fā)某個函數(shù),可以采用loadComplete事件。
loadComplete:This event is executed immediately after every server request. data Data from the response depending on datatype grid parameter
caption:字符串類型。表格的標(biāo)題。但這里可以寫一些html代碼,這是一個小技巧。
grouping :默認(rèn)false 不分組,反之亦然。
groupingView:關(guān)于分組:請參考JqGrid Demo,里面有詳細(xì)介紹。
editurl:編輯數(shù)據(jù)發(fā)送Url
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
jQuery("#jqgridlist").jqGrid('navGrid', '#pager', { edit: false, add: false, del: false }, {}, {}, {}, { multipleSearch: true, closeAfterSearch: true, closeOnEscape: true })
.navButtonAdd("#pager", {
caption: "",
buttonicon: "ui-icon-pencil",
onClickButton: function () {
var gr = jQuery("#jqgridlist").jqGrid("getGridParam", "selrow");
if (gr != null)
jQuery("#jqgridlist").jqGrid("editGridRow", gr, {
afterclickPgButtons: function (whichbutton, formid, rowid) {
var ret = jQuery("#jqgridlist").jqGrid('getRowData', rowid),
objYear = ret.JHQJ;
if (!ValidateDate(objYear)) jQuery("#sData").attr('disabled', 'disabled');
else
jQuery("#sData").removeAttr('disabled');
},
afterShowForm: function (formid) {
var jqgrid = jQuery("#jqgridlist");
var rowid = jqgrid.jqGrid("getGridParam", "selrow"),
ret = jqgrid.jqGrid('getRowData', rowid);
if (!ValidateDate(ret.JHQJ)) jQuery("#sData").attr('disabled', 'disabled');
else
jQuery("#sData").removeAttr('disabled');
},
beforeSubmit: function (postdata, formid) {
var reg = "^(([1-9]\\d*)|0)(\\.\\d{1,2})?$";
if (!Regex(reg, postdata.a21))
return [false, "銷售回款 格式錯誤"];
if (!Regex(reg, postdata.a22))
return [false, "營業(yè)收入 格式錯誤"];
if (!Regex(reg, postdata.a23))
return [false, "工業(yè)總產(chǎn)值 格式錯誤"];
if (!Regex(reg, postdata.a24))
return [false, "利潤總額 格式錯誤"];
if (!Regex(reg, postdata.a25))
return [false, "上交稅金 格式錯誤"];
else
return [true, ""];
},
afterSubmit: function (response, postdata) {
var json = response.responseText; //format is {status:"success/error",msg:""}
var result = eval("(" + json + ")"), successs = false;
if ("success" == result.status) {
successs = true;
$("#FormError td").html(result.msg);
$("#FormError").show();
}
return [successs, result.msg, ""];
}
});
else
alert("請選擇行");
},
position: "first",
title: "修改",
cursor: "pointer"
}).filterToolbar({ stringResult: true, autosearch: true, searchOnEnter: false, groupOp: "AND" });
function Regex(reg, val) {
var patt = new RegExp(reg, "g");
return patt.test(val);
}
function ValidateDate(objYear) {
var year = null,
month = null,
currentYear = null,
date = new Date();
if (objYear.length == 4) {
year = parseInt(objYear.substr(0, 4));
currentYear = parseInt(date.getFullYear());
} else {
year = parseInt(objYear.substr(0, 6))
month = (date.getMonth() + 1).toString();
month = month.length == 1 ? "0" + month : month;
currentYear = parseInt(date.getFullYear() + month);
}
if (year <= currentYear)
return false; //不?可¨¦以°?編À¨¤輯-
else
return true; //可¨¦以°?編À¨¤輯-
}
});
////////////////////////////////////////////////////////////////////////////////////////////////////
動態(tài)改變分組
jQuery("#chngroup").live("change", function () {
var vl = $(this).val(); if (vl) {
if (vl == "clear") {
jQuery("#jqgridlist").jqGrid('groupingRemove', true);
} else {
jQuery("#jqgridlist").jqGrid('groupingGroupBy', vl);
}
}
});
//////////////////////////////////////////////////////////////////////////////////////////////////////////
Slider 控制代碼
function CreateYearList() {
var currentYear = parseInt(new Date().getFullYear());
var mulitYear = currentYear - 1990;
var objul = $(".slider_context ul");
if (mulitYear >= 0) {
for (var index = -1, len = mulitYear; index <= len; index++) {
if (currentYear - index == currentYear)
objul.append("<li class='selected'>" + currentYear.toString() + "</li>");
else
objul.append("<li>" + (currentYear - index).toString() + "</li>");
}
} else {
objul.append("<li class='selected'>" + currentYear.toString() + "</li>");
}
}
$(function () {
CreateYearList();
$(".slider").silder({
speed: "normal",
slideBy: 2
});
});
$(".slider_context li").live("click", function () {
$.each($(".slider_context li"), function (id, item) {
$(this).removeClass('selected');
});
$(this).addClass('selected');
var yearVal = $(this).html();
var jqgrid = $("#jqgridlist");
jqgrid.setGridParam({ datatype: 'json' });
jqgrid.jqGrid('appendPostData', { year: yearVal, f: "year" });
jqgrid.trigger("reloadGrid");
jqgrid.jqGrid('removePostDataItem', "f");
});
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
var jqgrid = $("#jqgridlist");
//即本次修改前 先將datatype修改成json,否則不能回發(fā)到服務(wù)器
jqgrid.setGridParam({ datatype: 'json' });
jqgrid.jqGrid('appendPostData', { year: yearVal, f: "year" });//添加PostData
jqgrid.trigger("reloadGrid");//重新加載JqGrid
jqgrid.jqGrid('removePostDataItem', "f");//刪除PostData
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
gridComplete: function () {
$("#jqgridlist").setGridParam({ datatype: 'local' });
},
每次加載完成 就將jqgrid設(shè)置成本地數(shù)據(jù)。
Demo下載地址 /201105/yuanma/JqGridDemo.rar
- JQGrid的用法解析(列編輯,添加行,刪除行)
- jQuery中jqGrid分頁實(shí)現(xiàn)代碼
- jqGrid用法匯總(全經(jīng)典)
- jquery下動態(tài)顯示jqGrid以及jqGrid的屬性設(shè)置容易出現(xiàn)問題的解決方法
- jqGrid隨窗口大小變化自適應(yīng)大小的示例代碼
- Bootstrap嵌入jqGrid,使你的table牛逼起來
- 一個關(guān)于jqGrid使用的小例子(行按鈕)
- jqGrid 學(xué)習(xí)筆記整理——進(jìn)階篇(一 )
- 給jqGrid數(shù)據(jù)行添加修改和刪除操作鏈接(之一)
- 利用jqgrid實(shí)現(xiàn)上移下移單元格功能
相關(guān)文章
jQuery實(shí)現(xiàn)table表格checkbox全選的方法分析
這篇文章主要介紹了jQuery實(shí)現(xiàn)table表格checkbox全選的方法,結(jié)合實(shí)例形式分析了jQuery事件響應(yīng)與元素遍歷實(shí)現(xiàn)table表格checkbox元素狀態(tài)動態(tài)修改相關(guān)操作技巧,需要的朋友可以參考下2018-07-07
jQuery實(shí)現(xiàn)選中彈出窗口選擇框內(nèi)容后賦值給文本框的方法
這篇文章主要介紹了jQuery實(shí)現(xiàn)選中彈出窗口選擇框內(nèi)容后賦值給文本框的方法,涉及jQuery響應(yīng)鼠標(biāo)事件動態(tài)操作頁面元素屬性的相關(guān)技巧,需要的朋友可以參考下2015-11-11
基于jQuery的煙花效果(運(yùn)動相關(guān))點(diǎn)擊屏幕出煙花
基于jQuery的煙花效果(運(yùn)動相關(guān))點(diǎn)擊屏幕出煙花 ,經(jīng)測試不能點(diǎn)擊過多,容易假死2012-06-06
jQuery Mobile頁面跳轉(zhuǎn)后未加載外部JS原因分析及解決
Web開發(fā)進(jìn)行頁面跳轉(zhuǎn)時在pageB中引用的JS并未成功運(yùn)行,針對這個問題本文給予了詳細(xì)的解決方法,感興趣的你可以參考下哈,希望可以幫助到你2013-03-03


