jqGrid是一个基于Jquery的表格插件,官网地址:http://www.trirand.com/blog演示地址:http://www.trirand.com/jqgrid/jqgrid.html大家可以去下载开发包,使用这个插件又需要jquery-ui,所以这个组件也是必须的。 
    和众多juery插件一样,这款插件的后台代码也是PHP的,而实际项目中使用的Struts2,我不得不又一次翻译代码并集成到Struts2中,后台和js交互的数据类型是json,这就需要一个json处理类来负责数据格式的转换。 
    前端必须的css是:ui.jqgrid.css 在jqGrid中;jquery-ui.css 在jquery-ui中 
    必须的js是:jquery.js jquery.jqGrid.js grid.locale-cn.js 最后一个是中文资源文件,其实我是按照英文文件自己翻译过来的 
    若需要日期选择框,还需要ui.datepicker.css ui.datepicker.js 
   下面是代码说明: 
HTML代码:

  1. <table id="list" class="scroll" width="100%"></table>
  2. <div id="paging" class="scroll" style="text-align: center;"></div>

Table是这个插件使用的原始HTML的table,div来用于显示分页。Id值是自定义的,这个只要和js代码中的相关配置一致即可,都没什么说的,class是这个组件css中的样式 
JS代码:

  1. <script type="text/javascript">
  2. var lastsel;
  3. jQuery("#list").jqGrid({
  4. url:'${base}/manage/user/userlist.action',
  5. datatype: 'json',
  6. autowidth:true,
  7. height:220,
  8. rownumbers: true,
  9. colNames:['用户ID','登录名','真实名','性别','生日'],
  10. colModel:[
  11. {name:'userId',index:'userId', width:55,align:'center'},
  12. {name:'userName',index:'userName', width:55,align:'center',editable:true},
  13. {name:'realName',index:'realName', width:55,align:'center',editable:true},
  14. {name:'sex',index:'sex', width:55,align:'center',editable:true,edittype:"select",editoptions:{value:"男:男;女:女"}},
  15. {name:'birthday',index:'birthday', width:55,align:'center',editable:true,sorttype:"date"}
  16. ],
  17. rowNum:10,
  18. rowList:[10,20,30],
  19. imgpath: 'css3/images',
  20. pager: jQuery('#paging'),
  21. sortname: 'id',
  22. sortorder: "desc",
  23. multiselect: true,
  24. caption:"用户列表",
  25. onSelectRow: function(id){
  26. if(id && id!==lastsel){
  27. jQuery('#list').restoreRow(lastsel);
  28. jQuery('#list').editRow(id,true,pickdates);
  29. lastsel=id;
  30. }
  31. },
  32. editurl:" ${base}/manage/user/user!edit.action",
  33. }).navGrid("#paging",{edit:false,add:true,del:true});
  34. function pickdates(id){
  35. jQuery("#"+id+"_birthday","#list").datepicker({dateFormat:"yy-mm-dd"});
  36. }
  37. </script>

代码解释: 
url是后台数据传送过来的地址,这里我用Struts2,没什么好说的了 
datatype使用的是json,官方演示中还可以使用xml和js数组等,可以参考 
autowidth按字面意思理解即可,列宽度自适应 
hight就是控件的现实高度了 
rownumbers指定是否给显示从1开始的编号 
colNames是表头显示的内容了 
colModel就是具体数据的显示了这里可以参考官方演示,非常详细 
需要说明的是editable,该列是否可编辑 edittype指定可编辑的类型 
RowNum指定每次显示的数据量 
RowList是可选的现实数据量 
Imgpath 还没琢磨明白具体的含义 
Pager 就是分页了,上面指定过的div那层 
sortname排序的依据列 
sortorder 排序方式 
multiselect 是否可以多选,用于批量删除 
caption 表格的标题显示(这里的文字只能左对齐,我还没有找到居中的做法,还请高手赐教) 
onSelectRow就是当选定一行时,执行什么操作,这里是选定时将表格变为input可编辑效果 
editurl是做更新操作时的请求地址,那么在这个方法中区分是更新还是删除了 
下面的js函数就是做日期选择用的了。 
下面是后台代码说明:

  1. /**
  2. * 显示用户列表,封装为JsonView类型,前端使用jqGrid插件。设置的变量名都不得更改
  3. * 集合类均使用泛型
  4. * @author Sarin
  5. */
  6. public String userlist() {
  7. //准备jqGrid分页参数
  8. int total_pages = 0;
  9. int limit = Integer.parseInt(rows);
  10. int t_page = Integer.parseInt(page);
  11. if (sidx == null) {
  12. sidx = "userId";
  13. }
  14. //查询需要分页数据的总记录数
  15. int count = Integer.parseInt(getServMgr().getUserService().getUsersCount());
  16. //计算分页参数
  17. if (count > 0) {
  18. total_pages = (int) Math.ceil(count / limit) + 1;
  19. }
  20. if (t_page > total_pages) {
  21. t_page = total_pages;
  22. }
  23. int start = limit * t_page - limit;
  24. //获取记录列表
  25. List users = getServMgr().getUserService().getAllUsers(sidx + " " + sord, start, limit);
  26. List<Map> rows = new ArrayList<Map>();
  27. for (int i = 0; i < users.size(); i++) {
  28. Map<String, Object> map = new HashMap<String, Object>();
  29. //封装jqGrid可识别的数据格式
  30. Object[] cell = new Object[] { ((Map) users.get(i)).get("USERID"), ((Map) users.get(i)).get("USERNAME"),
  31. ((Map) users.get(i)).get("REALNAME"), ((Map) users.get(i)).get("SEX"),
  32. ((Map) users.get(i)).get("BIRTHDAY") };
  33. map.put("id", ((Map) users.get(i)).get("USERID"));//设置更新时的更新依据,一般为主键
  34. map.put("cell", cell);
  35. rows.add(map);
  36. }
  37. //构建Json类型的数据,参数名不可为其他的
  38. JSONObject result = new JSONObject();
  39. result.put("total", total_pages);
  40. result.put("records", count);
  41. result.put("page", t_page);
  42. result.put("rows", rows);
  43. //封装成jsonView向客户端输出
  44. jsonView = new JsonView(result);
  45. return "userlist";
  46. }

Struts2的配置

  1. <result-types>
  2. <result-type name="jsonView" class="***.***.util.json.JsonResult" />
  3. </result-types>
  4. <action name="userlist" class="***.***.action.UserAction" method="userlist">
  5. <result name="userlist" type="jsonView">
  6. <param name="jsonObjName">jsonView</param>
  7. </result>
  8. </action>

JsonResult源码

  1. package ***.***.util.json;
  2. import java.io.PrintWriter;
  3. import javax.servlet.http.HttpServletResponse;
  4. import org.apache.struts2.dispatcher.StrutsResultSupport;
  5. import com.opensymphony.xwork2.ActionInvocation;
  6. public class JsonResult extends StrutsResultSupport {
  7. private String contentTypeName;
  8. private String jsonObjName = "";
  9. public void setContentTypeName(String contentTypeName) {
  10. this.contentTypeName = contentTypeName;
  11. }
  12. public void setJsonObjName(String jsonObjName) {
  13. this.jsonObjName = jsonObjName;
  14. }
  15. @Override
  16. protected void doExecute(String finalLocation, ActionInvocation invocation) throws Exception {
  17. HttpServletResponse response = (HttpServletResponse) invocation.getInvocationContext().get(HTTP_RESPONSE);
  18. String contentType = conditionalParse(contentTypeName, invocation);
  19. if (contentType == null) {
  20. contentType = "text/json;charset=UTF-8";
  21. }
  22. response.setContentType(contentType);
  23. PrintWriter out = response.getWriter();
  24. JsonView result = (JsonView) invocation.getStack().findValue(jsonObjName);
  25. out.println(result);
  26. out.flush();
  27. out.close();
  28. }
  29. }

效果图: 

增强型表格/报表-jqGrid使用浅析的更多相关文章

  1. Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引

    因为内容比较多,所以每篇讲解一些内容,最后会放出全部代码,可以参考.操作中总会遇到各式各样的问题,个人对部分问题的研究在最后一篇 问题研究 里.欢迎大家探讨学习. 代码都经过个人测试,但仍可能有各种未 ...

  2. Web jquery表格组件 JQGrid 的使用 - 11.问题研究

    系列索引 Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引 Web jquery表格组件 JQGrid 的使用 - 4.JQGrid参数.ColModel API.事件 ...

  3. Web jquery表格组件 JQGrid 的使用 - 4.JQGrid参数、ColModel API、事件及方法

    系列索引 Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引 Web jquery表格组件 JQGrid 的使用 - 4.JQGrid参数.ColModel API.事件 ...

  4. Web jquery表格组件 JQGrid 的使用 - 5.Pager翻页、搜索、格式化、自定义按钮

    系列索引 Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引 Web jquery表格组件 JQGrid 的使用 - 4.JQGrid参数.ColModel API.事件 ...

  5. Web jquery表格组件 JQGrid 的使用 - 6.准备工作 & Hello JQGrid

    系列索引 Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引 Web jquery表格组件 JQGrid 的使用 - 4.JQGrid参数.ColModel API.事件 ...

  6. Web jquery表格组件 JQGrid 的使用 - 7.查询数据、编辑数据、删除数据

    系列索引 Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引 Web jquery表格组件 JQGrid 的使用 - 4.JQGrid参数.ColModel API.事件 ...

  7. Web jquery表格组件 JQGrid 的使用 - 8.Pager、新增数据、查询、刷新、查看数据

    系列索引 Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引 Web jquery表格组件 JQGrid 的使用 - 4.JQGrid参数.ColModel API.事件 ...

  8. Web jquery表格组件 JQGrid 的使用 - 全部代码

    系列索引 Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引 Web jquery表格组件 JQGrid 的使用 - 4.JQGrid参数.ColModel API.事件 ...

  9. [原创]Devexpress XtraReports 系列 2 创建表格报表

    昨天发表了Devexpress XtraReports系列开篇,今天我们继续. 今天的主题是创建表格报表. 首先我们来看看最后实现的效果.Demo最后附上. 接下来开始讲解如何一步一步做出这个报表: ...

随机推荐

  1. Verilog 读写文件

    Verilog 读写文件 在数字设计验证中,有时我们需要大量的数据,这时可以通过文件输入,有时我们需要保存数据,可以通过写文件保存. 读写文件testbench module file_rw_tb() ...

  2. ORACLE触发器概述之【语句触发器】【weber出品】

    一.触发器概述 与表,视图,模式,或者数据库相关的PL/SQL过程,当触发条件被触发时,自动执行 分类: 1.语句触发器 2.行触发器 二.语句触发器 1. 什么是语句触发器 语句触发器,是指当执行D ...

  3. HDU 5900 - QSC and Master [ DP ]

    题意: 给n件物品,有key和value 每次可以把相邻的 GCD(key[i], key[i+1]) != 1 的两件物品,问移除的物品的总value最多是多少 key : 1 3 4 2  移除3 ...

  4. Hadoop基本原理之一:MapReduce

    1.为什么需要Hadoop 目前,一块硬盘容量约为1TB,读取速度约为100M/S,因此完成一块硬盘的读取需时约2.5小时(写入时间更长).若把数据放在同一硬盘上,且全部数据均需要同一个程序进行处理, ...

  5. Win7中,取消共享文件夹后有个小锁

    用过windows7的朋友都知道,Windows 7 中设置某一个文件夹属性为共享后,文件夹的图标上就增加一个小锁图案.起到了一个标记作用,挺好的.但是即使你将该文件夹的共享功能取消后,该小锁图案还是 ...

  6. iOS学习之自定义视图时,在屏幕发生旋转时触发重新布局方法

    如果要对自定义的视图在屏幕旋转时重新布局,则在自定义视图中定义以下触发方法: -(void)layoutSubviews { [super layoutSubviews]; //1.获取到屏幕旋转的方 ...

  7. 配置Kestrel 网址Urls

    配置Kestrel 网址Urls ASP.NET Core中如何配置Kestrel Urls呢,大家可能都知道使用UseUrls() 方法来配置. 今天给介绍全面的ASP.NET Core 配置 Ur ...

  8. [LA] 3027 - Corporative Network [并查集]

    A very big corporation is developing its corporative network. In the beginning each of the N enterpr ...

  9. 挖掘机控制器与复制其MCU程序

    最近的时间都浪费在两台小松PW128UU-1上面.旧的一台拆了变速箱,装上去以后就变得换挡不行了.新的一台一直都不行,弄过液压泵以后下部分的行走又出现一时正常一时不动的情况. 先说说概况:PW128U ...

  10. Array.prototype.slice()的用法

    我们知道,Array.prototype.slice.call(arguments)能将具有length属性的对象转成数组,除了IE下的节点集合(因为ie下的dom对象是以com对象的形式实现的,js ...