`

【转】 jqGrid与Struts2的结合应用(八) —— 奇妙的subGrid子表格

 
阅读更多

转至:http://blog.csdn.net/gengv/article/details/5733058

作者:gengv

 

jqGrid的一项高级功能就是嵌套子表格,使用起来也非常简单。使用的方式有两种:

  • 使用普通的subGrid子表格;
  • 使用一个完整jqGrid作为子表格;

显然第二种方式更加通用,功能更加强大,因此我主要使用第二种方式。至于第一种方式,可以具体参考官方文档(http://www.trirand.com/jqgridwiki/doku.php?id=wiki:subgrid )。

使用完整jqGrid作为子表格 

使用子表格,涉及到jqGrid的三个选项:

  • subGrid :首先必须将jqGrid的subGrid选项设置为true,默认为false;当此项设为true的时候,Grid表格的最左边将会添加一列,里面有一个“+”图标,用于展开子格;
  • subGridRowExpanded :当点击“+”展开子表格时,将触发此选项定义的事件方法;
  • subGridRowColapsed :当点击“-”收起子表格时,将触发此选项定义的事件方法;

注1 :subGridRowExpanded定义的事件方法函数将会得到两个参数:

  • subgrid_id :子表格的id;当子表格展开的时候,在主表格中会创建一个div元素用来容纳子表格,subgrid_id就是这个div的id。
  • row_id :主表格中所要展开子表格的行的id。


注2 :在subGridRowExpanded定义的事件方法函数中,即可根据以上两个参数,创建新的jqGrid对象,其中的options选项可参考主表格的jqGrid选项来运用。可以理解为在主表格中在嵌套一个新的jqGrid对象。当然,在subGridRowExpanded定义的事件函数中,也不一定非得嵌套一个新的jqGrid到主表格,可以将其放置于任何自己希望的位置,甚至做些别的操作,根本不去里理会子表格,比如使用$.ajax()向Server发送ajax请求,并根据返回的json,做些自定义的操作。

注3 :应当注意subGridRowColapsed的拼写并太符合规范,但却不得不遵循这个拼写。哈哈~

注4 :相对于subGridRowExpanded必须定义事件函数来完成操作,subGridRowColapsed不用刻意定义对应的事件函数;因为当行收起的时候,上面提到的那个动态创建用来容纳子表格的div,其里面的内容将会被自动移除(removed)。

现在来看看代码中到底多了哪些内容。

 

FetchPatentCasesAction代码:

 

[java] view plaincopy
  1. package cn.gengv.struts2ex.jqGrid;  
  2. import java.util.List;  
  3. import com.byzl.hare.dao.impl.Criterion;  
  4. import com.byzl.hare.model.Contact;  
  5. import com.byzl.hare.model.PatentCase;  
  6. import com.byzl.hare.service.ContactService;  
  7. @SuppressWarnings("serial")  
  8. public class FetchPatentCasesAction extends JqGridBaseAction<PatentCase> {  
  9.       
  10.     private ContactService contactService;  
  11.       
  12.     private Contact contact;  
  13.       
  14.     @Override  
  15.     public String execute() {  
  16.         return this.refreshGridModel();  
  17.     }  
  18.       
  19.     @Override  
  20.     public int getResultSize() {  
  21.         return this.contactService.queryPatentCasesCount(contact);  
  22.     }  
  23.     @Override  
  24.     public int getResultSize(List<Criterion> criteria) {  
  25.         return this.contactService.queryPatentCasesCount(contact);  
  26.     }  
  27.     @Override  
  28.     public List<PatentCase> listResults(int from, int length) {  
  29.         return this.contactService.queryPatentCases(contact, from, length);  
  30.           
  31.     }  
  32.     @Override  
  33.     public List<PatentCase> listResults(List<Criterion> criteria, int from,  
  34.             int length) {  
  35.         return this.contactService.queryPatentCases(contact, from, length);  
  36.     }  
  37.     @Override  
  38.     public void sortResults(List<PatentCase> results, String field, String order) {  
  39.         // TODO Auto-generated method stub  
  40.           
  41.     }  
  42.     public void setContactService(ContactService contactService) {  
  43.         this.contactService = contactService;  
  44.     }  
  45.     public Contact getContact() {  
  46.         return contact;  
  47.     }  
  48.     public void setContact(Contact contact) {  
  49.         this.contact = contact;  
  50.     }  
  51. }  

 


Action设置:

 

[xhtml] view plaincopy
  1. <action name="fetchPatentCases" class="cn.gengv.struts2ex.jqGrid.FetchPatentCasesAction">  
  2.     <result name="success" type="json">  
  3.         <param name="includeProperties">  
  4.             gridModel/[/d+/]/./w+,  
  5.             rows,page,total,record  
  6.             </param>  
  7.         <param name="noCache">true</param>  
  8.         <param name="ignoreHierarchy">false</param>  
  9.     </result>  
  10. </action>  

 

 


javascript代码:

 

[javascript] view plaincopy
  1. $(function(){  
  2.     // 配置jqGrid组件  
  3.     $("#gridTable").jqGrid({  
  4.         url: "jqGrid05.action",  
  5.         datatype: "json",  
  6.         mtype: "GET",  
  7.         height: 350,  
  8.         width: 600,  
  9.         colModel: [  
  10.               {name:"id",index:"id",label:"编码",width:40},    
  11.               {name:"lastName",index:"lastName",label:"姓",width:80},  
  12.               {name:"firstName",index:"firstName",label:"名",width:80},  
  13.               {name:"email",index:"email",label:"电子邮箱",width:160,sortable:false},  
  14.               {name:"telNo",index:"telNo",label:"电话",width:120,sortable:false}  
  15.         ],  
  16.         viewrecords: true,  
  17.         rowNum: 15,  
  18.         rowList: [15,50,100],  
  19.         prmNames: {search: "search"},  
  20.         jsonReader: {  
  21.             root:"gridModel",  
  22.             records: "record",  
  23.             repeatitems : false,  
  24.         },  
  25.         pager: "#gridPager",  
  26.         caption: "联系人列表",  
  27.         hidegrid: false,  
  28.         shrikToFit: true,  
  29.         subGrid: true,  // (1)开启子表格支持  
  30.         subGridRowExpanded: function(subgrid_id, row_id) {  // (2)子表格容器的id和需要展开子表格的行id,将传入此事件函数  
  31.             var subgrid_table_id;  
  32.             subgrid_table_id = subgrid_id + "_t";   // (3)根据subgrid_id定义对应的子表格的table的id  
  33.               
  34.             var subgrid_pager_id;  
  35.             subgrid_pager_id = subgrid_id + "_pgr"  // (4)根据subgrid_id定义对应的子表格的pager的id  
  36.               
  37.             // (5)动态添加子报表的table和pager  
  38.             $("#" + subgrid_id).html("<table id='"+subgrid_table_id+"' class='scroll'></table><div id='"+subgrid_pager_id+"' class='scroll'></div>");  
  39.               
  40.             // (6)创建jqGrid对象  
  41.             $("#" + subgrid_table_id).jqGrid({  
  42.                 url: "fetchPatentCases.action?contact.id="+row_id,  // (7)子表格数据对应的url,注意传入的contact.id参数  
  43.                 datatype: "json",  
  44.                 colNames: ['编号','内部编码','名称','申请号'],  
  45.                 colModel: [  
  46.                     {name:"id",index:"id",width:80,key:true},  
  47.                     {name:"internalNo",index:"internalNo",width:130},  
  48.                     {name:"name",index:"name",width:80,align:"right"},  
  49.                     {name:"applicationNo",index:"applicationNo",width:80,align:"right"}  
  50.                 ],  
  51.                 jsonReader: {   // (8)针对子表格的jsonReader设置  
  52.                     root:"gridModel",  
  53.                     records: "record",  
  54.                     repeatitems : false  
  55.                 },  
  56.                 prmNames: {search: "search"},  
  57.                 pager: subgrid_pager_id,  
  58.                 viewrecords: true,  
  59.                 height: "100%",  
  60.                 rowNum: 5  
  61.            });  
  62.        }  
  63.     });  
  64.       
  65. });  

 

 


说明:

  • 由于FetchPatentCasesAction继承自JqGridBaseAction<PatentCase>,因此可以像之前的例子那样,使用这个Action类来应对jqGrid子表格的请求。
  • FetchPatentCasesAction的Action设置也可以仿照其他针对jqGrid的Action来设置。
  • 对于子表格Grid来说,和主表格Grid并没有什么分别,主表格中可以用的选项,在子表格中也可以使用。因此需要设置jsonReader等选项来配合FetchPatentCasesAction中的成员变量。


OK,就这么简单,子表格功能完成了。

分享到:
评论

相关推荐

    jqGrid与Struts2的结合应用_操作Grid数据

    总结来说,jqGrid 与 Struts2 的结合应用提供了高效的数据展示和管理能力。通过理解并熟练运用 jqGrid 的核心方法,开发者可以构建出功能丰富的数据网格,同时结合 Struts2 的灵活性,实现前后端的无缝协作,提高...

    jqGrid与Struts2的结合应用

    在jqGrid与Struts2的结合应用中,我们通常会经历以下几个步骤: 1. **配置Struts2**:首先,需要在项目的`struts.xml`配置文件中添加jqGrid相关的Action,这些Action负责处理来自jqGrid的AJAX请求,获取或更新...

    jqgrid+struts2

    **三、jqGrid与Struts2结合应用** jqGrid与Struts2的结合使用可以实现数据的后台动态加载和前端的交互操作。具体步骤如下: 1. **配置Struts2 Action**:创建一个Action类,负责处理请求并返回数据。例如,可以创建...

    jqgrid+struts2实现的增删改查

    在本项目中,jqGrid 与 Struts2 结合,实现了Web应用中的核心功能——增删改查。以下是关键步骤: 1. **配置 Struts2**:首先,需要在项目的 `struts.xml` 配置文件中设置Action类及其对应的URL映射,以及指定使用...

    jqGrid与Struts2 详细文档

    总的来说,jqGrid 与 Struts2 结合使用,可以构建出功能丰富的数据展示和管理界面。理解并熟练掌握 jqGrid 的选项配置和与服务器端的交互机制,对于提升 Web 应用的用户体验和数据管理能力至关重要。

    jqGrid表格应用——新增与删除数据

    在"jqGrid表格应用——新增与删除数据"这个主题中,我们可以探讨以下知识点: 1. **jqGrid的基本结构**:jqGrid的HTML结构通常包括一个`&lt;table&gt;`元素,以及必要的CSS和JavaScript引用。例如,`index.html`可能包含`...

    jqGrid与Sturts2的结合例子

    将jqGrid与Struts2结合,可以创建高效的前端数据展示和交互界面,同时利用Struts2的强大后端处理能力。 在这个"jqGrid与Struts2的结合例子"中,我们将探讨如何将这两者集成,以实现动态加载、数据过滤、编辑和保存...

    jqgrid+struts2+ibatis增删改查

    这里,jqGrid是一个强大的JavaScript表格插件,Struts2是一个Java Web应用程序框架,iBatis是一个SQL映射框架,而Oracle则是一种广泛使用的数据库管理系统。接下来,我们将深入探讨这些技术及其整合实现增删改查功能...

    jqGrid 中文大全(1)

    jqGrid尤其在Web应用程序中,与后端如Struts2等框架结合使用时,能够提供高效的数据展示和管理。 在“jqGrid中文大全(1)”这个压缩包中,包含了一系列关于jqGrid的中文教程和文档,这些资料可以帮助开发者更深入地...

    jqGrid demo in JSP Struts2 & Hibernate 新版myeclise for Spring 10.0

    struts配置文件和hibernate的配置文件都在src目录下 4.这就是jqGrid最简单的演示,没有加入任何其它功能, Good Luck! 有人问到没有spring,由于主要是演示jqGrid和jQuery的AJAX功能,所以没有加上spring框架, 如有...

    数据表格JqGrid自适应列宽度

    5. **使用CSS和媒体查询**:除了JqGrid内部的自适应机制,还可以结合CSS和媒体查询(Media Queries)来控制表格在不同屏幕尺寸下的表现。例如,可以为小屏幕设备定义不同的列宽和布局。 6. **jQuery插件**:有时...

    Struts2JQGrid java版本分页

    Struts2JQGrid是一个基于Java的Web开发框架,它结合了Struts2和JQGrid两个强大的工具,用于创建动态、交互式的网格数据展示和管理界面。在本项目中,Struts2作为MVC(Model-View-Controller)框架负责处理业务逻辑和...

    jqgrid-subgrid

    jqgrid-subgrid支持数据的分层显示,样式也可以自己调整

    jqGrid demo in Struts2 & Hibernate war file part 1

    Struts2 和 hibernate 演示 jqGrid, 使用Action中的 代码可以容易的把jqGrid 用于servlet或纯jsp. Struts 2.16, jqGrid 3.5b, hibernate 3.2 annotation 由于我的上传权限为20M,而我上传上的包括所有的源代码和支持...

    jqGrid demo in Struts2 & Hibernate war file part2

    jqGrid demo in Struts2 & Hibernate war file part2

    jquery表格插件jqgrid

    **jQuery表格插件jqGrid详解** jqGrid是一款强大的基于JavaScript的开源网格控件,它能够为Web应用程序提供灵活、功能丰富的数据展示和操作界面。这款插件是jQuery库的一个扩展,专为处理大量数据和实现复杂的表格...

    jqgrid 表格的增删改查以及modal弹出框

    jqGrid 是一个强大的 jQuery 插件,用于创建交互式的、数据丰富的网格视图。这个插件支持多种功能,包括但不限于数据的增删...理解并熟练掌握 jqGrid 的使用,对任何需要处理大量数据的 Web 应用来说都是非常有价值的。

    jqGrid的自适应表格

    在这个"jqGrid的自适应表格"示例中,我们将探讨如何利用jqGrid实现表格的自适应窗口大小,以及在单元格数据过多时如何优雅地处理显示。 首先,要创建一个基本的jqGrid,你需要在HTML文件中引入jQuery库和jqGrid的...

    jqGrid插件--JQuery表格插件

    9. **插件扩展**:jqGrid有丰富的插件系统,如`subgrid`用于嵌套表格,`treegrid`实现树形结构,`navigator`提供额外的操作按钮等。在`plugins`目录下的文件即为这些插件的实现。 10. **版本更新与社区支持**:...

    jqGrid增删改查例子

    这个"jqGrid增删改查例子"是一个实际应用示例,展示了如何结合Struts2框架和MySQL数据库实现一个完整的CRUD(创建、读取、更新、删除)功能的前端表格。 首先,让我们了解一下jqGrid的核心功能: 1. 数据展示:...

Global site tag (gtag.js) - Google Analytics