`
sarin
  • 浏览: 1753888 次
  • 性别: Icon_minigender_1
  • 来自: 大连
博客专栏
E3b14d1f-4cc5-37dd-b820-b6af951740bc
Spring数据库访问系列...
浏览量:173356
C2083dc5-6474-39e2-993e-263652d27795
Android学习笔记
浏览量:367649
5f40a095-b33c-3e8e-8891-606fcf3b8d27
iBatis开发详解
浏览量:188924
B272a31d-e7bd-3eff-8cc4-c0624ee75fee
Objective-C学习...
浏览量:99552
社区版块
存档分类
最新评论

增强型表格/报表-jqGrid使用浅析

阅读更多
    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代码:
<table id="list" class="scroll" width="100%"></table>
<div id="paging" class="scroll" style="text-align: center;"></div>

Table是这个插件使用的原始HTML的table,div来用于显示分页。Id值是自定义的,这个只要和js代码中的相关配置一致即可,都没什么说的,class是这个组件css中的样式
JS代码:
<script type="text/javascript"> 
var lastsel;
jQuery("#list").jqGrid({
   	url:'${base}/manage/user/userlist.action',
	datatype: 'json',
   	autowidth:true,
   	height:220,
   	rownumbers: true,
   	colNames:['用户ID','登录名','真实名','性别','生日'],
   	colModel:[	
   		{name:'userId',index:'userId', width:55,align:'center'},	
   		{name:'userName',index:'userName', width:55,align:'center',editable:true},	
   		{name:'realName',index:'realName', width:55,align:'center',editable:true},	
   		{name:'sex',index:'sex', width:55,align:'center',editable:true,edittype:"select",editoptions:{value:"男:男;女:女"}},
   		{name:'birthday',index:'birthday', width:55,align:'center',editable:true,sorttype:"date"}
   	],
  	rowNum:10,
   	rowList:[10,20,30],
   	imgpath: 'css3/images',
   	pager: jQuery('#paging'),
   	sortname: 'id',
    sortorder: "desc",
    multiselect: true,
    caption:"用户列表",
    onSelectRow: function(id){
		if(id && id!==lastsel){
			jQuery('#list').restoreRow(lastsel);
			jQuery('#list').editRow(id,true,pickdates);
			lastsel=id;
		}
	},
    editurl:" ${base}/manage/user/user!edit.action",
}).navGrid("#paging",{edit:false,add:true,del:true});
 
function pickdates(id){
	jQuery("#"+id+"_birthday","#list").datepicker({dateFormat:"yy-mm-dd"});
}
</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函数就是做日期选择用的了。
下面是后台代码说明:
/**
	 * 显示用户列表,封装为JsonView类型,前端使用jqGrid插件。设置的变量名都不得更改
	 * 集合类均使用泛型
	 * @author Sarin
	 */
	public String userlist() {
		//准备jqGrid分页参数
		int total_pages = 0;
		int limit = Integer.parseInt(rows);
		int t_page = Integer.parseInt(page);
		if (sidx == null) {
			sidx = "userId";
		}
		//查询需要分页数据的总记录数
		int count = Integer.parseInt(getServMgr().getUserService().getUsersCount());
		//计算分页参数
		if (count > 0) {
			total_pages = (int) Math.ceil(count / limit) + 1;
		}
		if (t_page > total_pages) {
			t_page = total_pages;
		}
		int start = limit * t_page - limit;
		//获取记录列表
		List users = getServMgr().getUserService().getAllUsers(sidx + " " + sord, start, limit);
		List<Map> rows = new ArrayList<Map>();
		for (int i = 0; i < users.size(); i++) {
			Map<String, Object> map = new HashMap<String, Object>();
			//封装jqGrid可识别的数据格式
			Object[] cell = new Object[] { ((Map) users.get(i)).get("USERID"), ((Map) users.get(i)).get("USERNAME"),
					((Map) users.get(i)).get("REALNAME"), ((Map) users.get(i)).get("SEX"),
					((Map) users.get(i)).get("BIRTHDAY") };
			map.put("id", ((Map) users.get(i)).get("USERID"));//设置更新时的更新依据,一般为主键
			map.put("cell", cell);
			rows.add(map);
		}
		//构建Json类型的数据,参数名不可为其他的
		JSONObject result = new JSONObject();
		result.put("total", total_pages);
		result.put("records", count);
		result.put("page", t_page);
		result.put("rows", rows);
		//封装成jsonView向客户端输出
		jsonView = new JsonView(result);
		return "userlist";
	}

Struts2的配置
<result-types>
  <result-type name="jsonView" class="***.***.util.json.JsonResult" />
</result-types>

<action name="userlist" class="***.***.action.UserAction" method="userlist">
    <result name="userlist" type="jsonView">
	<param name="jsonObjName">jsonView</param>
    </result>
</action>

JsonResult源码
package ***.***.util.json;

import java.io.PrintWriter;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.dispatcher.StrutsResultSupport;
import com.opensymphony.xwork2.ActionInvocation;

public class JsonResult extends StrutsResultSupport {
	private String contentTypeName;
	private String jsonObjName = "";
	public void setContentTypeName(String contentTypeName) {
		this.contentTypeName = contentTypeName;
	}
	public void setJsonObjName(String jsonObjName) {
		this.jsonObjName = jsonObjName;
	}
	@Override
	protected void doExecute(String finalLocation, ActionInvocation invocation) throws Exception {
		HttpServletResponse response = (HttpServletResponse) invocation.getInvocationContext().get(HTTP_RESPONSE);
		String contentType = conditionalParse(contentTypeName, invocation);
		if (contentType == null) {
			contentType = "text/json;charset=UTF-8";
		}
		response.setContentType(contentType);
		PrintWriter out = response.getWriter();
		JsonView result = (JsonView) invocation.getStack().findValue(jsonObjName);
		out.println(result);
		out.flush();
		out.close();
	}
}

效果图:
分享到:
评论
9 楼 sarin 2011-10-19  
yaozx027 写道
请教楼主:我在在线行编辑的时候日期控件不能使,也就是说我进行行编辑的时候,如果对OrderDate这一列进行编辑,控件出不来,只能通过键盘操作。求解。代码如下:
@model MvcApplication2.Models.OrdersJqGridModel
@using Trirand.Web.Mvc
<p>
    <script type="text/javascript" src="/Scripts/trirand/jquery.jqDatePicker.min.js"></script>   
    <script type="text/javascript">

        var lastSelection;
        function editRow(id) {
            if (id && id !== lastSelection) {
                var grid = $("#EditRowInlineGrid");
                grid.restoreRow(lastSelection);
                grid.editRow(id, true);
                lastSelection = id;
            }
        }
      
       </script>
    To learn more about ASP.NET MVC visit <a href="http://asp.net/mvc" title="ASP.NET MVC Website">http://asp.net/mvc</a>.
</p>

@Html.Trirand().JQGrid(Model.OrdersGrid, "EditRowInlineGrid")
@Html.Trirand().JQDatePicker(
            new JQDatePicker
                {
                    DisplayMode = DatePickerDisplayMode.ControlEditor,
                    ShowOn = ShowOn.Focus,                   
                    DateFormat = "yyyy/mm/dd",                                       
                    MinDate = new DateTime(1995,1,1),
                    MaxDate = new DateTime(2012,12,21)
                }, "DatePicker")
     

我使用的是jqueryUI中的datepicker
8 楼 yaozx027 2011-10-19  
请教楼主:我在在线行编辑的时候日期控件不能使,也就是说我进行行编辑的时候,如果对OrderDate这一列进行编辑,控件出不来,只能通过键盘操作。求解。代码如下:
@model MvcApplication2.Models.OrdersJqGridModel
@using Trirand.Web.Mvc
<p>
    <script type="text/javascript" src="/Scripts/trirand/jquery.jqDatePicker.min.js"></script>   
    <script type="text/javascript">

        var lastSelection;
        function editRow(id) {
            if (id && id !== lastSelection) {
                var grid = $("#EditRowInlineGrid");
                grid.restoreRow(lastSelection);
                grid.editRow(id, true);
                lastSelection = id;
            }
        }
      
       </script>
    To learn more about ASP.NET MVC visit <a href="http://asp.net/mvc" title="ASP.NET MVC Website">http://asp.net/mvc</a>.
</p>

@Html.Trirand().JQGrid(Model.OrdersGrid, "EditRowInlineGrid")
@Html.Trirand().JQDatePicker(
            new JQDatePicker
                {
                    DisplayMode = DatePickerDisplayMode.ControlEditor,
                    ShowOn = ShowOn.Focus,                   
                    DateFormat = "yyyy/mm/dd",                                       
                    MinDate = new DateTime(1995,1,1),
                    MaxDate = new DateTime(2012,12,21)
                }, "DatePicker")
     
7 楼 luosky 2009-12-16  
luosky 写道
其封装的cell字段用数组形式,其顺序直接就是前台展示字段的顺序,这点太不合理了.不知道有没有其他的方法可以后台能用map形式输出,前台通过键去获取数据展示么?


在 http://a3mao.iteye.com/blog/539929 上找到答案了
6 楼 luosky 2009-12-16  
其封装的cell字段用数组形式,其顺序直接就是前台展示字段的顺序,这点太不合理了.不知道有没有其他的方法可以后台能用map形式输出,前台通过键去获取数据展示么?
5 楼 pp7765 2009-11-29  
解决了,可以在选择事件时登记一下,也可以在翻页事件时登记
4 楼 pp7765 2009-11-29  
再请教LZ:
在可选择表格中,选定几条数据后如果翻页后就丢失了,例如在第一页选择了第3、6条记录,然后翻页到第二页再选择第12、13条,这时候Get Selected id's只能得到12、13.

有办法记录前页选择的记录不?

3 楼 pp7765 2009-11-29  
yes,谢谢LZ
2 楼 sarin 2009-11-29  
pp7765 写道
请问LZ:html代码如果外加一个层:
<div>
<table id="list" class="scroll" width="100%"></table> 
<div id="paging" class="scroll" style="text-align: center;"></div> 
</div>

页面就会出错,为什么?
谢谢!

您好,我经过测试没有发现问题,是不是您的页面没有文档类型的声明?
加上<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
试试
1 楼 pp7765 2009-11-29  
请问LZ:html代码如果外加一个层:
<div>
<table id="list" class="scroll" width="100%"></table> 
<div id="paging" class="scroll" style="text-align: center;"></div> 
</div>

页面就会出错,为什么?
谢谢!

相关推荐

    前端项目-free-jqgrid.zip

    在"jqGrid-master"压缩包中,包含了jqGrid的主要源代码、文档和示例。这些内容可以帮助开发者快速理解和使用free-jqgrid: 1. **源代码**:src目录下包含了jqGrid的核心JavaScript文件和CSS样式文件,这是构建网格...

    jQuery tonytomov-jqGrid-v4.5.2 插件

    总的来说,jQuery tonytomov-jqGrid-v4.5.2 是一个强大而灵活的表格插件,适用于需要展示大量结构化数据的Web应用。通过深入理解和有效利用其功能,开发者可以创建出高效、美观且功能丰富的数据管理界面。

    jqGrid学习笔记1 - - - - jqGrid英语PDF文档

    jqGrid是一款功能强大的JavaScript数据网格插件,常用于在网页上展示、操作和管理大量结构化数据。这个学习笔记主要围绕“jqGrid学习笔记1”展开,内容来源于jqGrid的英文PDF文档,结合了源码解析和实用工具的介绍。...

    free-jqgrid-4.15.5.tgz

    本文将深入探讨free-jqgrid-4.15.5版本,此版本包含了所有的js和css文件,为开发者提供了完整的jqGrid学习和应用资源。 一、jqGrid概述 jqGrid是一款基于jQuery的开源数据网格组件,它允许用户在网页上创建交互式...

    jqGrid 做的表格分页

    &lt;link type="text/css" rel="stylesheet" href="css/ui.jqgrid.css"&gt; &lt;link rel="stylesheet" type="text/css" media="screen" href="css/ui.multiselect.css"&gt; &lt;script type="text/javascript" src="js/jquery-...

    jqGrid4.8.2 jqgrid_demo40

    jquery.jqGrid-4.8.2(jquery表格插件).zip----------jqGrid4.8.2包,官网下载的,原封不动的在这里。 jqgrid_demo40-----可用的-使用方法请查看README文件. jqgrid_3.6.5_API_en.chm------附加放在这里的其它资料...

    jquery-jqgrid 3.6源码及中文文档

    jquery-jqgrid源码及中文文档

    table表格样式利用jqgrid实现

    jqGrid的使用可以极大地提升表格的用户体验,使其在数据管理方面更加高效。 在实现表格样式时,jqGrid允许自定义CSS样式,你可以根据需求调整表格的边框、背景色、字体大小等样式属性。例如,通过设置`ui.jqgrid`、...

    jqgrid +bootstrap4.0 直接使用

    在这一版本中,jqGrid 可能进行了性能优化和功能增强,以适应不断变化的 Web 开发环境。 总的来说,这个资源包为开发者提供了一个快速入门 jqGrid 和 Bootstrap 4 结合使用的途径。它包含了一个完整的示例项目,...

    前端项目-jqgrid.zip

    在"jqGrid-master"压缩包中,通常包含以下组成部分: 1. **源代码文件**:如JavaScript库(jqGrid.js或min.js)、CSS样式文件(ui.jqgrid.css)以及可能的图片资源,这些都是运行jqGrid的基本组件。 2. **示例和...

    Laravel开发-jqgrid

    在本文中,我们将深入探讨如何在Laravel框架中集成并使用jqGrid库,这是一个强大的JavaScript数据网格组件,用于实现高效的数据展示、检索和操作。Laravel作为PHP领域内的热门Web开发框架,以其优雅的语法和丰富的...

    jqGrid中文说明,对jQgrid表格关键使用方法中文说明

    jqGrid中文说明,对jQgrid表格关键使用方法中文说明 jqGrid是基于jQuery的数据表格插件,用于将需要展示的数据动态的展示在页面上,即动态画出表格,并封装了增、删、改、查、分类显示、在线编辑修改等功能。下面将...

    jQgrid demo

    1. **数据加载与显示**:jQGrid 支持从服务器或本地数据源动态加载数据,并以表格形式展示。它可以处理 JSON、XML、CSV 等多种数据格式,适应不同后端接口的需求。 2. **分页**:jQGrid 提供了内置的分页功能,用户...

    jqGrid4.6.0 jqgrid_demo40

    jquery.jqGrid-4.6.0(jquery表格插件).zip----------jqGrid4.6.0包,官网下载的,原封不动的在这里。 jqgrid_demo40-----可用的-使用方法请查看README文件.rar-----------经我修改过的demo40,官网上面demo40下载...

    jqgrid_doc

    "jqgriddocs_english_bi.pdf"文档是jqGrid的英文版官方文档,它详细介绍了如何安装和使用jqGrid,包括基本配置、数据源设定、列定义、操作方法、事件处理、自定义函数等内容。文档还涵盖了各种高级特性,如树形网格...

    实例讲解在ASP.NET MVC模式通过jQgrid表格操作

    实例讲解在ASP.NET MVC模式通过jQgrid表格操作 文章来自学IT网:http://www.xueit.com/asp.net/show-9768-3.aspx实例讲解在ASP.NET MVC模式通过jQgrid表格操作 文章来自学IT网:...

    jqGrid3.6中文文档

    jqGrid 使用 AJAX 实现异步通信,当用户在前端操作表格(如筛选、排序、分页等)时,jqGrid 会通过 AJAX 请求将这些操作转换为对服务器的请求。服务器根据这些请求返回相应的数据或执行操作,然后将结果以 JSON 或 ...

    jqgrid使用说明

    JqGrid可以实现的功能不限于传统表格,还包括tree型表格,即表格中的某列可以显示树状结构数据,允许用户对数据进行层次化操作。 总之,JqGrid的学习是深入理解其各种功能和参数配置,以及如何通过AJAX与其他系统...

    jqGrid手册教程一本通

    jqGrid使用ajax来实现请求与响应的处理。 接下来,我们来介绍一下jqGrid的皮肤。从3.5版本开始,jqGrid完全支持jqueryUI的theme。我们可以通过访问***来下载所需的主题,当然也可以自己编辑主题。对于jqGrid,我们...

Global site tag (gtag.js) - Google Analytics