jqgrid 简单学习笔记


Posted in Javascript onMay 03, 2011

JqGrid文档:http://www.trirand.com/jqgridwiki/doku.php?id=wiki:jqgriddocs

JqGrid Demo:http://trirand.com/blog/jqgrid/jqgrid.html#t107

JqGrid的基础,我这里就不做介绍了,不知道的可以去看看博客园或Google,最好去看文档。先看效果图:

jqgrid 简单学习笔记

本Demo可以查询、修改、分组。新增、删除等一些基本功能都可以去JqGrid Demo中找到。

逻辑思路:第一次加载本年度的经营计划数据,加载完成后,将JqGrid设置成本地数据,这样分页、数据查询都成customs。只能修改本月以后的计划,在afterShowForm和afterclickPgButtons做验证,如果时间小于等于本月,这将提交按钮设置成disabled。否则提交按钮可以使用。在提交服务器前,需要将JqGrid的datatype设置成json,否则不会请求服务器。

本Demo只做了2010、2011、2012年三个静态数据源,修改数据只做了返回信息,并没修改数据源数据。

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("客服端解析数据错误!\n请与管理员联系"); 
else 
alert"请求服务器错误!\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", "单位名称", "销售回款", "营业收入", "工业总产值", "利润总额", "上交税金"], 
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:如果设置成json ,那么请求的数据是json格式。而且每次增删查改操作,都会请求服务器。
如果设置成local ,那么所有操作都将在是客服端完成,不发送到服务器。
如果设置成函数(见本示例),每次获取数据,都会经过本函数处理一次。
可以通过调试JS代码,来验证。
rownumbers: 设置成false,就不显示行号;否则反之
loadonce: 设置成true,表示一次性导入数据;默认为false
rowTotal: 表色一次性导入数据的最大行数。
jsonReader:配置与服务器端返回的数据做相关对应,详细情况见文档:http://www.trirand.com/jqgridwiki/doku.php?id=wiki:retrieving_data
gridComplete:全部数据加载完成并且其他所有处理事件完成时触发。英文文档解释: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.如果你只是数据加载完成时就需要触发某个函数,可以采用loadComplete事件。
loadComplete:This event is executed immediately after every server request. data Data from the response depending on datatype grid parameter
caption:字符串类型。表格的标题。但这里可以写一些html代码,这是一个小技巧。
grouping :默认false 不分组,反之亦然。
groupingView:关于分组:请参考JqGrid Demo,里面有详细介绍。
editurl:编辑数据发送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, "营业收入 格式错误"];
if (!Regex(reg, postdata.a23))
return [false, "工业总产值 格式错误"];
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; //可¨¦以°?编À¨¤辑-
}
});
////////////////////////////////////////////////////////////////////////////////////////////////////
动态改变分组
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,否则不能回发到服务器
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设置成本地数据。
Demo下载地址 /201105/yuanma/JqGridDemo.rar
Javascript 相关文章推荐
匹配任意字符的正则表达式写法
Apr 29 Javascript
JQueryEasyUI datagrid框架的基本使用
Apr 08 Javascript
js动态创建表格,删除行列的小例子
Jul 20 Javascript
JS简单实现登陆验证附效果图
Nov 19 Javascript
JavaScript indexOf方法入门实例(计算指定字符在字符串中首次出现的位置)
Oct 17 Javascript
jQuery提示插件qTip2用法分析(支持ajax及多种样式)
Jun 08 Javascript
使用微信小程序开发前端【快速入门】
Dec 05 Javascript
深入理解Angularjs中$http.post与$.post
May 19 Javascript
解决easyui日期时间框ie的兼容的问题
Mar 01 Javascript
JS实现的简单折叠展开动画效果示例
Apr 28 Javascript
Vue仿支付宝支付功能
May 25 Javascript
es6中new.target的作用和使用场景简单示例分析
Mar 14 Javascript
用js实现判断当前网址的来路如果不是指定的来路就跳转到指定页面
May 02 #Javascript
jQuery之网页换肤实现代码
Apr 30 #Javascript
HTML5附件拖拽上传drop &amp; google.gears实现代码
Apr 28 #Javascript
很棒的学习jQuery的12个网站推荐
Apr 28 #Javascript
推荐20家国外的脚本下载网站
Apr 28 #Javascript
JavaScript中的this实例分析
Apr 28 #Javascript
File, FileReader 和 Ajax 文件上传实例分析(php)
Apr 27 #Javascript
You might like
完美解决AJAX跨域问题
2013/11/01 Javascript
jquery中$(#form :input)与$(#form input)的区别
2014/08/18 Javascript
jquery中的工具使用方法$.isFunction, $.isArray(), $.isWindow()
2015/08/09 Javascript
学习JavaScript设计模式(多态)
2015/11/25 Javascript
基于BootStrap Metronic开发框架经验小结【七】数据的导入、导出及附件的查看处理
2016/05/12 Javascript
JS正则表达式修饰符global(/g)用法分析
2016/12/27 Javascript
Webpack常见静态资源处理-模块加载器(Loaders)+ExtractTextPlugin插件
2017/06/29 Javascript
angular实现spa单页面应用实例
2017/07/10 Javascript
JavaScript时间戳与时间日期间相互转换
2017/12/11 Javascript
简单的vuex 的使用案例笔记
2018/04/13 Javascript
Vue Router去掉url中默认的锚点#
2018/08/01 Javascript
React Component存在的几种形式详解
2018/11/06 Javascript
基于Vue+elementUI实现动态表单的校验功能(根据条件动态切换校验格式)
2019/04/04 Javascript
Vue路由之JWT身份认证的实现方法
2019/08/26 Javascript
vue实现购物车案例
2020/05/30 Javascript
[04:31]2016国际邀请赛中国区预选赛妖精采访
2016/06/27 DOTA
各种Python库安装包下载地址与安装过程详细介绍(Windows版)
2016/11/02 Python
详解python之简单主机批量管理工具
2017/01/27 Python
Python tkinter模块弹出窗口及传值回到主窗口操作详解
2017/07/28 Python
解决pycharm无法调用pip安装的包问题
2018/05/18 Python
PyCharm的设置方法和第一个Python程序的建立
2019/01/16 Python
美国女鞋品牌:naturalizer(娜然)
2016/08/01 全球购物
美国演唱会订票网站:Ticketmaster美国
2017/10/05 全球购物
荷兰皇家航空公司官方网站:KLM Royal Dutch Airlines
2017/12/07 全球购物
奢华时尚的创新平台:Baltini
2020/10/03 全球购物
西安当代医院管理研究院笔试题
2015/12/11 面试题
启动一个线程是用run()还是start()
2016/12/25 面试题
体育教育毕业生自荐信
2013/11/21 职场文书
英文简历中的自荐信范文
2013/12/14 职场文书
数控技术学生的自我评价
2014/02/15 职场文书
财务管理职业生涯规划书
2014/02/26 职场文书
2014党员民主评议个人总结
2014/09/10 职场文书
秋季运动会广播稿(30篇)
2014/09/13 职场文书
鸟的天堂导游词
2015/01/31 职场文书
文明礼仪倡议书
2015/04/28 职场文书
毕业欢送会致辞
2015/07/29 职场文书