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 相关文章推荐
JS 常用校验函数
Mar 26 Javascript
25个优雅的jQuery Tooltip插件推荐
May 25 Javascript
JS清除IE浏览器缓存的方法
Jul 26 Javascript
js中top的作用深入剖析
Mar 04 Javascript
jquery.fastLiveFilter.js实现输入自动过滤的方法
Aug 11 Javascript
angularjs学习笔记之三大模块(modal,controller,view)
Sep 26 Javascript
jQuery 自定义下拉框(DropDown)附源码下载
Jul 22 Javascript
总结Javascript中的隐式类型转换
Aug 24 Javascript
原生JS实现前端本地文件上传
Sep 08 Javascript
JavaScript实现表单注册、表单验证、运算符功能
Oct 15 Javascript
jQuery实现的别踩白块小游戏完整示例
Jan 07 jQuery
js实现幻灯片轮播图
Aug 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
PHP产生不重复随机数的5个方法总结
2014/11/12 PHP
PHP分页初探 一个最简单的PHP分页代码的简单实现
2016/06/21 PHP
php实现的读取CSV文件函数示例
2017/02/07 PHP
Laravel 自动生成验证的实例讲解:login / logout
2019/10/14 PHP
php将字符串转换为数组实例讲解
2020/05/05 PHP
php判断数组是否为空的实例方法
2020/05/10 PHP
JS中不为人知的五种声明Number的方式简要概述
2013/02/22 Javascript
javascript 判断字符串是否包含某字符串及indexOf使用示例
2013/10/18 Javascript
JQuery的$和其它JS发生冲突的快速解决方法
2014/01/24 Javascript
JavaScript实现检查页面上的广告是否被AdBlock屏蔽了的方法
2014/11/03 Javascript
javascript跨域原因以及解决方案分享
2015/04/08 Javascript
jQuery插件制作之参数用法实例分析
2015/06/01 Javascript
JS实现的仿淘宝交易倒计时效果
2015/11/27 Javascript
利用babel将es6语法转es5的简单示例
2017/12/01 Javascript
JS与CSS3实现图片响应鼠标移动放大效果示例
2018/05/04 Javascript
JS实现二维数组元素的排列组合运算简单示例
2019/01/28 Javascript
JS控制只能输入数字并且最多允许小数点两位
2019/11/24 Javascript
浅谈Python中的数据类型
2015/05/05 Python
浅析python中的分片与截断序列
2016/08/09 Python
浅谈Python黑帽子取代netcat
2018/02/10 Python
python pycurl验证basic和digest认证的方法
2018/05/02 Python
Python类super()及私有属性原理解析
2020/06/15 Python
filter使用python3代码进行迭代元素的实例详解
2020/12/03 Python
html5 video标签屏蔽右键视频另存为的js代码
2013/11/12 HTML / CSS
html5使用window.postMessage进行跨域实现数据交互的一次实战
2021/02/24 HTML / CSS
澳大利亚拥有最佳跳伞降落点和最好服务的跳伞项目运营商:Skydive Australia
2018/03/05 全球购物
Qoo10台湾站:亚洲领先的在线市场
2018/05/15 全球购物
报关简历自我评价怎么写
2013/09/19 职场文书
开办加工厂创业计划书
2014/01/03 职场文书
党的群众路线教育实践活动心得体会900字
2014/03/07 职场文书
优秀班集体先进事迹材料
2014/05/28 职场文书
乒乓球兴趣小组活动总结
2014/07/08 职场文书
2019年汽车租赁合同范本!
2019/08/12 职场文书
详解Flutter网络请求Dio库的使用及封装
2022/04/14 Java/Android
Java 异步任务计算FutureTask
2022/04/28 Java/Android
Windows server 2012 R2 安装IIS服务器
2022/04/29 Servers