`
wusuoya
  • 浏览: 643225 次
  • 性别: Icon_minigender_2
  • 来自: 成都
社区版块
存档分类
最新评论

JqGrid相关操作 方法列表

    博客分类:
  • web
 
阅读更多

1.获得当前列表行数:$("#gridid").getGridParam("reccount");

2.获取选中行数据json):$("#gridid").jqGrid('getRowData', id);

3.刷新列表:$(refreshSelector).jqGrid('setGridParam', { url: ''), postData: ''}).trigger('reloadGrid'); 

4.选中行:$("#jqGrid").setSelection("1", true);   (Toggles a selection of the row with id = rowid; if onselectrow is true (the default) then the event onSelectRow is launched, otherwise it is not.//true:重新加载表格数据, false:不重新加载表格数据

5.重置选中行:$("#jqgrid").resetSelection(); //Resets (unselects) the selected row(s). Also works in multiselect mode.

6.清除:$("#jqgrid").clearGridData();   //Clears the currently loaded data from grid. If the clearfooter parameter is set to true, the method clears the data placed on the footer row.

7. $("#jqgrid").setCell(rowid,colname,nData,cssp,attrp); 

//This method can change the content of particular cell and can set class or style properties. Where: 

rowid the id of the row, 
colname the name of the column (this parameter can be a number (the index of the column) beginning from 0 
data the content that can be put into the cell. If empty string the content will not be changed 
class if class is string then we add a class to the cell using addClass; if class is an array we set the new css properties via css 
properties sets the attribute properies of the cell, 

forceup If the parameter is set to true we perform update of the cell instead that the value is empty 

 

8.获取选中行ID

 var rowid = $("#jqgrid").jqGrid('getGridParam','selrow'); 

var rowid = $("#searchResultList").getGridParam("selrow");
var rowData = $("#searchResultList").getRowData(rowid); /根据行ID,获取选中行的数据(根据)

//获取选中的多行ID列表
var selectedIds  = jQuery("#stationList").jqGrid("getGridParam","selarrrow"); 允许多行选择时使用

=================重点讲解================

 

1.1 prmNames选项

prmNames是jqGrid的一个重要选项,用于设置jqGrid将要向Server传递的参数名称。其默认值为:

  

  1. prmNames : {  
  2.     page:"page",    // 表示请求页码的参数名称  
  3.     rows:"rows",    // 表示请求行数的参数名称  
  4.     sort: "sidx"// 表示用于排序的列名的参数名称  
  5.     order: "sord"// 表示采用的排序方式的参数名称  
  6.     search:"_search"// 表示是否是搜索请求的参数名称  
  7.     nd:"nd"// 表示已经发送请求的次数的参数名称  
  8.     id:"id"// 表示当在编辑数据模块中发送数据时,使用的id的名称  
  9.     oper:"oper",    // operation参数名称(我暂时还没用到)  
  10.     editoper:"edit"// 当在edit模式中提交数据时,操作的名称  
  11.     addoper:"add"// 当在add模式中提交数据时,操作的名称  
  12.     deloper:"del"// 当在delete模式中提交数据时,操作的名称  
  13.     subgridid:"id"// 当点击以载入数据到子表时,传递的数据名称  
  14.     npage: null,   
  15.     totalrows:"totalrows" // 表示需从Server得到总共多少行数据的参数名称,参见jqGrid选项中的rowTotal  
  16. }  

 

 

可以通过这个选项来自定义当向Server发送请求时,默认发送的参数名称。
这个参数很重要也很有用,正是通过这个参数,可以方便的改变默 认的request的参数,以符合Server端的需要。比如在prmNames中search默认的值为"_search",这在Struts2的 Action中不太方便命名成员变量和getter/ setter。因此可以使用 prmNames: {search: 'search'} 来改变这一默认值为"search",这在Struts2的Action对象中就很好设置getter/ setter了,即getSearch()和setSearch()。当然其他名字也是可以的。

 

1.2 jsonReader选项

jsonReader是jqGrid的一个重要选项,用于设置如何解析从Server端发回来的json数据。其默认值为:

 

  1. jsonReader : {  
  2.     root: "rows",   // json中代表实际模型数据的入口  
  3.     page: "page",   // json中代表当前页码的数据  
  4.     total: "total"// json中代表页码总数的数据  
  5.     records: "records"// json中代表数据行总数的数据  
  6.     repeatitems: true// 如果设为false,则jqGrid在解析json时,会根据name来搜索对应的数据元素(即可以json中元素可以不按顺序);而所使用的name是来自于colModel中的name设定。  
  7.     cell: "cell",  
  8.     id: "id",  
  9.     userdata: "userdata",  
  10.     subgrid: {  
  11.         root:"rows",   
  12.         repeatitems: true,   
  13.         cell:"cell"  
  14.     }  
  15. }  

 

 

可以这样理解,prmNames设置了如何将Grid所需要的参数传给Server,而jsonReader设置了如何去解析从Server端传回 来的json数据。如果没有设置jsonReader的话,jqGrid将会根据默认的设置来解析json数据,并显示在表格里。但如果传回来的json 数据,不太符合默认设置(比如内部的结构名不太一样),那么就有必要修改这一设置。比如:

 

  1. jsonReader: {  
  2.     root:"gridModel",     
  3.     page: "page",     
  4.     total: "total",  
  5.     records: "record",  
  6.     repeatitems : false  
  7. }  

 

 

注1:据其他网友的文章,如果设置repeatitems为false,不但数据可以乱序,而且不用每个数据元素都要具备,用到哪个找到哪个就可以了。实验却是如此。
注2:cell、id在repeatitems为true时可以用到,即每一个记录是由一对id和cell组合而成,即可以适用另一种json结构。援引文档中的例子:

repeatitems为true时:

 

  1. jQuery("#gridid").jqGrid({  
  2.     ...  
  3.     jsonReader : {  
  4.         root:"invdata",  
  5.         page: "currpage",  
  6.         total: "totalpages",  
  7.         records: "totalrecords"  
  8.     },  
  9.     ...  
  10. });  

 

json结构为:

 

  1. {   
  2.     "totalpages""xxx",   
  3.     "currpage""yyy",  
  4.     "totalrecords""zzz",  
  5.     "invdata" : [  
  6.                  {"id" :"1""cell" :["cell11""cell12""cell13"]},   // cell中不需要各列的name,只要值就OK了,但是需要保持对应  
  7.                  {"id" :"2""cell" :["cell21""cell22""cell23"]},  
  8.                  ...  
  9.     ]  
  10. }  

 

 

 

repeatitems为false时:

 

  1. jQuery("#gridid").jqGrid({  
  2.     ...  
  3.     jsonReader : {  
  4.         root:"invdata",  
  5.         page: "currpage",  
  6.         total: "totalpages",  
  7.         records: "totalrecords",  
  8.         repeatitems: false,  
  9.         id: "0"  
  10.     },  
  11.     ...  
  12. });  

 

json结构为:

 

  1. {   
  2.     "totalpages" : "xxx",   
  3.     "currpage" : "yyy",  
  4.     "totalrecords" : "zzz",  
  5.     "invdata" : [  
  6.                  {"invid" : "1","invdate":"cell11""amount" :"cell12""tax" :"cell13""total" :"1234""note" :"somenote"}, // 数据中需要各列的name,但是可以不按列的顺序  
  7.                  {"invid" : "2","invdate":"cell21""amount" :"cell22""tax" :"cell23""total" :"2345""note" :"some note"},  
  8.                  ...  
  9.     ]  
  10. }  

 

 

 

 

 

 

 

2. colModel的重要选项 

和jqGrid一样colModel也有许多非常重要的选项,在使用搜索、排序等方面都会用到。这里先只说说最基本的。

  • name :为Grid中的每个列设置唯一的名称,这是一个必需选项,其中保留字包括subgrid、cb、rn。
  • index :设置排序时所使用的索引名称,这个index名称会作为sidx参数(prmNames中设置的)传递到Server。
  • label :当jqGrid的colNames选项数组为空时,为各列指定题头。如果colNames和此项都为空时,则name选项值会成为题头。
  • width :设置列的宽度,目前只能接受以px为单位的数值,默认为150。
  • sortable :设置该列是否可以排序,默认为true。
  • search :设置该列是否可以被列为搜索条件,默认为true。
  • resizable :设置列是否可以变更尺寸,默认为true。
  • hidden :设置此列初始化时是否为隐藏状态,默认为false。
  • formatter :预设类型或用来格式化该列的自定义函数名。常用预设格式有:integer、date、currency、number等(具体参见文档 )。

 

 

 

 

3. 第一个实例

 

3.1 服务器

用于提供数据的Action。为了可以复用这种专门接受jqGrid传来参数的Action,我抽象出一个基本类。具体代码如下:

  1. package cn.gengv.struts2ex.jqGrid;  
  2.    
  3. import java.util.Collections;  
  4. import java.util.List;  
  5. import com.opensymphony.xwork2.ActionSupport;  
  6.    
  7. @SuppressWarnings("serial")  
  8. public abstract class JqGridBaseAction<T> extends ActionSupport {  
  9.     // 和jqGrid组件相关的参数属性  
  10.     private List<T> gridModel = Collections.emptyList();  
  11.     private Integer rows = 0;  
  12.     private Integer page = 0;  
  13.     private Integer total = 0;  
  14.     private Integer record = 0;  
  15.     private String sord;  
  16.     private String sidx;  
  17.     private String search;  
  18.    
  19.     public abstract int getResultSize();  
  20.    
  21.     public abstract List<T> listResults(int from, int length);  
  22.    
  23.     public String refreshGridModel() {  
  24.         try {  
  25.             List<T> results = Collections.emptyList();  
  26.             record = this.getResultSize();  
  27.             int from = rows * (page - 1);  
  28.             int length = rows;  
  29.             results = this.listResults(from, length);  
  30.             this.setGridModel(results);  
  31.             total = (int) Math.ceil((double) record / (double) rows);  
  32.             return SUCCESS;  
  33.         } catch (Exception e) {  
  34.             e.printStackTrace();  
  35.             this.addActionError(e.getMessage());  
  36.             return ERROR;  
  37.         }  
  38.     }  
  39.    
  40.     public List<T> getGridModel() {  
  41.         return gridModel;  
  42.     }  
  43.     public void setGridModel(List<T> gridModel) {  
  44.         this.gridModel = gridModel;  
  45.     }  
  46.     public Integer getRows() {  
  47.         return rows;  
  48.     }  
  49.     public void setRows(Integer rows) {  
  50.         this.rows = rows;  
  51.     }  
  52.     public Integer getPage() {  
  53.         return page;  
  54.     }  
  55.     public void setPage(Integer page) {  
  56.         this.page = page;  
  57.     }  
  58.     public Integer getTotal() {  
  59.         return total;  
  60.     }  
  61.     public void setTotal(Integer total) {  
  62.         this.total = total;  
  63.     }  
  64.     public Integer getRecord() {  
  65.         return record;  
  66.     }  
  67.     public void setRecord(Integer record) {  
  68.         this.record = record;  
  69.     }  
  70.     public String getSord() {  
  71.         return sord;  
  72.     }  
  73.     public void setSord(String sord) {  
  74.         this.sord = sord;  
  75.     }  
  76.     public String getSidx() {  
  77.         return sidx;  
  78.     }  
  79.     public void setSidx(String sidx) {  
  80.         this.sidx = sidx;  
  81.     }  
  82.     public String getSearch() {  
  83.         return search;  
  84.     }  
  85.     public void setSearch(String search) {  
  86.         this.search = search;  
  87.     }  
  88. }  

 

 

说明:

  • 其中的成员变量对应着jqGrid的prmNames和jsonReader中的设置。

 

成员变量 对应 prmNames 对应 jsonReader 注释
rows rows - 每页中现实的记录行数
search search - 是否是用于查询的请求
sidx sort - 用于排序的列名
sord order - 排序的方式
page page page 当前页码
gridModel - root 用于得到实际数据的数组名称
total - total 总页数
record - records 总记录数

 

  • refreshGridModel()方法中,主要工作就是为gridModel、record、total赋值,这些值也将会传回客户端

 

具体的一个实现类:

 

  1. package cn.gengv.struts2ex.jqGrid;  
  2. import java.util.Collections;  
  3. import java.util.List;  
  4. @SuppressWarnings("serial")  
  5. public class ListContactsAction extends JqGridBaseAction<Contact> {  
  6.       
  7.     private ContactService contactService;  
  8.       
  9.     @Override  
  10.     public String execute() {  
  11.         return this.refreshGridModel();  
  12.     }  
  13.       
  14.     @Override  
  15.     public int getResultSize() {  
  16.         return this.contactService.queryResultsCount();  
  17.     }  
  18.       
  19.     @Override  
  20.     public List<Contact> listResults(int from, int length) {  
  21.         List<Contact> results = Collections.emptyList();  
  22.           
  23.         results = this.contactService.queryByPage(from, length);  
  24.           
  25.         return results;  
  26.     }  
  27.     public void setContactService(ContactService contactService) {  
  28.         this.contactService = contactService;  
  29.     }  
  30.       
  31. }  

 

 

而在struts.xml中,应按如下设置配置action:

 

  1. <action name="jqGrid01" class="cn.gengv.struts2ex.jqGrid.ListContactsAction">  
  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>  

 

 

3.2 客户端(浏览器

 

javascript部分:

 

  1. $(function(){  
  2.     // 配置jqGrid组件  
  3.     $("#gridTable").jqGrid({  
  4.         url: "jqGrid01.action",  
  5.         datatype: "json",  
  6.         mtype: "GET",  
  7.         height: 350,  
  8.         autowidth: true,  
  9.         colModel: [  
  10.               {name:"id",index:"id",label:"ID",width:40},    
  11.               {name:"lastName",index:"lastName",label:"Last Name",width:80,sortable:false},  
  12.               {name:"firstName",index:"firstName",label:"First Name",width:80,sortable:false},  
  13.               {name:"email",index:"email",label:"E-mail",width:160,sortable:false},  
  14.               {name:"telNo",index:"telNo",label:"Tel No",width:120,sortable:false}  
  15.         ],  
  16.         viewrecords: true,  
  17.         rowNum: 15,  
  18.         rowList: [15,50,100],  
  19.         prmNames: {search: "search"},   //(1)  
  20.         jsonReader: {  
  21.             root:"gridModel",       // (2)  
  22.             records: "record",      // (3)  
  23.             repeatitems : false     // (4)  
  24.         },  
  25.         pager: "#gridPager",  
  26.         caption: "联系人列表",  
  27.         hidegrid: false  
  28.     });  
  29. });  

 

 

其中主要的选项在开头已经介绍过了,另外需要说明以下几点:
1、在位置(1)处,为了配合Server端的Action类中的成员变量命名,将prmNames中search对应的“_search”更改为“search”。
2、在位置(2)(3)处,为了配合Server端的Action类中的成员变量命名,将jsonReader中root对应的“rows”更改为“gridModel”,将records对应的“records”更改为“record”。
在后面的request和response解析中,就可以看到这些更改的作用。

 

 

 

html部分:

 

要想顺利的使用jqGrid,需要想页面中引入6个文件,其中4个js文件,2个css文件。它们分别是:

  • jquery-ui-1.8.1.custom.css(jQuery UI界面的CSS文件)
  • ui.jqgrid.custom.css(专用于jqGrid界面的CSS文件)
  • jquery-1.4.2.min.js(jQuery的核心)
  • jquery-ui-1.8.1.custom.min.js(用于支持jQuery UI界面)
  • grid.locale-zh-CN.js(针对jqGrid的locale设置,根据locale不同,选择不同的尾缀)
  • jquery.jqGrid.min.js(jqGrid的核心,可以到jqGrid网站,根据需求选择模块下载)


 :jqGrid的官方包中原本针对中文的locale js文件是grid.locale-cn.js,但是里面的某些设置,并没有做到完全中文化,因此我从Struts2-jQuery插件中分离出grid.locale-zh-CN.js和jquery.ui.datepicker-zh-CN.min.js这两个文件以备后用。说起来这两个文件中,针对中文的设置还是不错的。


引入这6个文件后,创建jqGrid的工作就交给上面写的javascript代码来完成了。

 

 

  1. <!DOCTYPE html  
  2. PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"  
  3. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  4. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-CN" lang="zh-CN">  
  5.     <head>  
  6.         <title>jqGrid01</title>  
  7.         <link rel="stylesheet" type="text/css" media="screen" href="../css/themes/aero/jquery-ui-1.8.1.custom.css" mce_href="css/themes/aero/jquery-ui-1.8.1.custom.css" />  
  8.         <link rel="stylesheet" type="text/css" media="screen" href="../css/themes/aero/ui.jqgrid.custom.css" mce_href="css/themes/aero/ui.jqgrid.custom.css" />  
  9.           
  10.         <mce:script type="text/javascript" src="../js/jquery-1.4.2.min.js" mce_src="js/jquery-1.4.2.min.js"></mce:script>  
  11.         <mce:script src="../js/jquery-ui-1.8.1.custom.min.js" mce_src="js/jquery-ui-1.8.1.custom.min.js" type="text/javascript"></mce:script>  
  12.         <mce:script src="../js/i18n/grid.locale-zh-CN.js" mce_src="js/i18n/grid.locale-zh-CN.js" type="text/javascript"></mce:script>  
  13.         <mce:script src="../js/jquery.jqGrid.min.js" mce_src="js/jquery.jqGrid.min.js" type="text/javascript"></mce:script>  
  14.           
  15.         <mce:script src="js/jqGrid01.js" mce_src="js/jqGrid01.js" type="text/javascript"></mce:script>    
  16.     </head>  
  17.     <body>  
  18.         <h2>  
  19.             jqGrid测试 01  
  20.         </h2>  
  21.         <div>  
  22.             <table id="gridTable"></table>  
  23.             <div id="gridPager"></div>  
  24.         </div>  
  25.     </body>  
  26. </html>  

 

 

HTML中的代码,异常简洁。

 

 

 

 

3.3 整个流程

 

通过Firebug监测request和response就可以看出Server和浏览器之间的数据交互。当打开页面的时候,jqGrid初始化,会向Server发送url中定义的request,并传递参数。如下:

 

http://localhost:8085/Hare/jqGridTest/jqGrid01.action?search=false&nd=1278331032140&rows=15&page=1&sidx=&sord=asc

 

jqGrid会根据prmNames中的定义,向Server传递参数,例如将jqGrid选项中rowNum的值,作为参数rows传递到Server。

由于我将prmNames中的search设为“search”,所以参数里表中出现了这个参数;否则仍会根据原来的默认值,出现“_search”参数。


再看看response,Server发送来的json数据,格式是这样的:

 

  1. {  
  2.     "gridModel": [  
  3.             {  
  4.                 "address""ADDR-yjfrot4i008toqlrl4dfq9",  
  5.                 "email""vl3@jv36.com",  
  6.                 "firstName""FN-gn7po9c9m",  
  7.                 "fullName""LN-3h6d1q FN-gn7po9c9m",  
  8.                 "id": 23016,  
  9.                 "idCardNo""CARD-28ew6dekrv9g8dml4n",  
  10.                 "lastName""LN-3h6d1q",  
  11.                 "nationality""NAT-6z1xhty2",  
  12.                 "telNo":: "TEL-x3i4a625i"  
  13.             },  
  14.             {  
  15.                 "address""ADDR-9zeiasrr",  
  16.                 "email""wba@6ym4.com",  
  17.                 "firstName""FN-8mwhw7n",  
  18.                 "fullName""LN-yaontk FN-8mwhw7n",  
  19.                 "id": 23015,  
  20.                 "idCardNo""CARD-gqqbd9s4zjexj05sus",  
  21.                 "lastName""LN-yaontk",  
  22.                 "nationality""NAT-0phliht",  
  23.                 "telNo":: "TEL-jf4c31"  
  24.             },  
  25.             {  
  26.                 "address""ADDR-o4ml00d98j7xgktl",  
  27.                 "email""m7j@dwy.com",  
  28.                 "firstName""FN-etzsxbaq4",  
  29.                 "fullName""LN-uedrek8 FN-etzsxbaq4",  
  30.                 "id": 23014,  
  31.                 "idCardNo""CARD-md9bcyef7wvcc7om6b",  
  32.                 "lastName""LN-uedrek8",  
  33.                 "nationality""NAT-okbb5",  
  34.                 "telNo":: "TEL-pp0d00"  
  35.             },  
  36.             {  
  37.                 "address""ADDR-obzar7v7z58uux",  
  38.                 "email""sqj@44wfo.com",  
  39.                 "firstName""FN-f1qnbw0x",  
  40.                 "fullName""LN-20ug4vxfc FN-f1qnbw0x",  
  41.                 "id": 23013,  
  42.                 "idCardNo""CARD-kzil6hhtpo68izim0b",  
  43.                 "lastName""LN-20ug4vxfc",  
  44.                 "nationality""NAT-dxidrf",  
  45.                 "telNo":: "TEL-eug8ydessk"  
  46.             },  
  47.             {  
  48.                 "address""ADDR-r7954tumxw133a9os90l",  
  49.                 "email""2in@tw7.com",  
  50.                 "firstName""FN-pw1yl8ux",  
  51.                 "fullName""LN-nk7qg6by FN-pw1yl8ux",  
  52.                 "id": 23012,  
  53.                 "idCardNo""CARD-0cx02jpey6nivhkr29",  
  54.                 "lastName""LN-nk7qg6by",  
  55.                 "nationality""NAT-85tl0a",  
  56.                 "telNo":: "TEL-4aa404"  
  57.             },   
  58.             {  
  59.                 "address""ADDR-jxmudykwu7kcu",  
  60.                 "email""0um@ut9yh.com",  
  61.                 "firstName""FN-cjxxxds3",  
  62.                 "fullName""LN-3iviu7o FN-cjxxxds3",  
  63.                 "id": 23011,  
  64.                 "idCardNo""CARD-9evl3ul16uldvjango",  
  65.                 "lastName""LN-3iviu7o",  
  66.                 "nationality""NAT-v2gnaa9",  
  67.                 "telNo":: "TEL-gzbn1w"  
  68.             },   
  69.             {  
  70.                 "address""ADDR-9xsk62kmdidc",  
  71.                 "email""cld@pnx.com",  
  72.                 "firstName""FN-iqygy07ku",  
  73.                 "fullName""LN-3mrxki FN-iqygy07ku",  
  74.                 "id": 23010,  
  75.                 "idCardNo""CARD-ccypafwru43cqyjo62",  
  76.                 "lastName""LN-3mrxki",  
  77.                 "nationality""NAT-qjpvfa",  
  78.                 "telNo":: "TEL-2bqxde"  
  79.             },   
  80.             {  
  81.                 "address""ADDR-t8dizyumbedgbd0u8ml",  
  82.                 "email""dhk@yr8k.com",  
  83.                 "firstName""FN-89xwf0",  
  84.                 "fullName""LN-8wr6uiig3 FN-89xwf0",  
  85.                 "id": 23009,  
  86.                 "idCardNo""CARD-7t09x2dw3i3y78z24e",  
  87.                 "lastName""LN-8wr6uiig3",  
  88.                 "nationality""NAT-9uu7xo",  
  89.                 "telNo":: "TEL-p8ym9rtwy"  
  90.             },   
  91.             {  
  92.                 "address""ADDR-gupoe8jwcqwcjs2u01oa8",  
  93.                 "email""gug@wqb.com",  
  94.                 "firstName""FN-0amkpy2",  
  95.                 "fullName""LN-i73kpz5nc FN-0amkpy2",  
  96.                 "id": 23008,  
  97.                 "idCardNo""CARD-itgmrwwichkzan5220",  
  98.                 "lastName""LN-i73kpz5nc",  
  99.                 "nationality""NAT-k2aq2t",  
  100.                 "telNo":: "TEL-2wdhbs"  
  101.             },   
  102.             {  
  103.                 "address""ADDR-gp9q73fzs68agav6",  
  104.                 "email""jj3@rpwe.com",  
  105.                 "firstName""FN-w42bd8y",  
  106.                 "fullName""LN-utrnn25c FN-w42bd8y",  
  107.                 "id": 23007,  
  108.                 "idCardNo""CARD-rrznb3ihqf94k2wjkv",  
  109.                 "lastName""LN-utrnn25c",  
  110.                 "nationality""NAT-gs3e9rk",  
  111.                 "telNo":: "TEL-g8j19nqz9"  
  112.             },   
  113.             {  
  114.                 "address""ADDR-ja8w4gq485m3dn2gr66",  
  115.                 "email""zt5@sy30t.com",  
  116.                 "firstName""FN-dxfyd5m5m",  
  117.                 "fullName""LN-li98bk FN-dxfyd5m5m",  
  118.                 "id": 23006,  
  119.                 "idCardNo""CARD-indqfrmi13zfazly67",  
  120.                 "lastName""LN-li98bk",  
  121.                 "nationality""NAT-qglj9sx2",  
  122.                 "telNo":: "TEL-mzlpe3m"  
  123.             },   
  124.             {  
  125.                 "address""ADDR-rm3r94qanvt1q4drp",  
  126.                 "email""uct@ayg0.com",  
  127.                 "firstName""FN-qkq3w1m",  
  128.                 "fullName""LN-0j90sa FN-qkq3w1m",  
  129.                 "id": 23005,  
  130.                 "idCardNo""CARD-8vc92wevyunbpl29c0",  
  131.                 "lastName""LN-0j90sa",  
  132.                 "nationality""NAT-mv2wzlt",  
  133.                 "telNo":: "TEL-ntkah0"  
  134.             },   
  135.             {  
  136.                 "address""ADDR-u3gsxpq61e2",  
  137.                 "email""7zr@k7du4.com",  
  138.                 "firstName""FN-evno7jy",  
  139.                 "fullName""LN-0fuix09 FN-evno7jy",  
  140.                 "id": 23004,  
  141.                 "idCardNo""CARD-jgyf09by0rxboex8ut",  
  142.                 "lastName""LN-0fuix09",  
  143.                 "nationality""NAT-cw8cctzy",  
  144.                 "telNo":: "TEL-artsappc2"  
  145.             },   
  146.             {  
  147.                 "address""ADDR-04kfdpp7",  
  148.                 "email""qm6@9c2.com",  
  149.                 "firstName""FN-zz0e74gvh",  
  150.                 "fullName""LN-26u851 FN-zz0e74gvh",  
  151.                 "id": 23003,  
  152.                 "idCardNo""CARD-wminx9rykz1sn7xsxz",  
  153.                 "lastName""LN-26u851",  
  154.                 "nationality""NAT-05uk2c93",  
  155.                 "telNo":: "TEL-9de2jt4oh",  
  156.             },   
  157.             {  
  158.                 "address""ADDR-i18dy2cew6eizvmvgi0w",  
  159.                 "email""r8x@n67mb.com",  
  160.                 "firstName""FN-gt4aice1",  
  161.                 "fullName""LN-db6vre9 FN-gt4aice1",  
  162.                 "id": 23002,  
  163.                 "idCardNo""CARD-spwifyvehzkcfj5g7f",  
  164.                 "lastName""LN-db6vre9",  
  165.                 "nationality""NAT-osiionb",  
  166.                 "telNo":: "TEL-1vigb907",  
  167.             }  
  168.       ],        
  169.     "page": 1,  
  170.     "record": 23013,  
  171.     "rows": 15,  
  172.     "total": 1535  
  173. }  

 

 

jqGrid根据jsonReader中的设置,解析json数据。根据jsonReader中的root(我设置的是“gridModel”), 得到数据记录数组;根据rows得到每页显示的行数;根据page设置当前页数;根据records(我设置的是“record”)得到所有记录数量;根 据total得到所有页数。



由此,jqGrid完成一个request,并将得到的response,解析为所需的数据,显示到Grid表格中。

如何操作Grid表格及其数据。

 

jqGrid有很多方法函数,用来操作数据或者操作Grid表格本身。jqGrid的方法有两种调用方式:

$("#grid_id").jqGridMethod( parameter1,...,parameterN );

或者

$("#grid_id").jqGrid('method', parameter1,...,parameterN );

 

首先介绍一下jqGrid的几个最常用的方法函数,具体的方法API也可以参考官方文档(http://www.trirand.com/jqgridwiki/doku.php?id=wiki:methods )

 

1. getGridParam

 

这个方法用来获得jqGrid的选项值。它具有一个可选参数name,name即代表着jqGrid的选项名,例如:

  1. var id = $("#gridTable").jqGrid("getGridParam""selrow");  


即可获得当前选中的行的ID。

 

 

注:selrow是jqGrid选项之一,默认值是null。这是一个只读选项,代表最后选中行的ID。如果执行翻页或者排序后,此选项将被设为null。关于其他选项,后续会有介绍。

 

如果不传入name参数,则会返回jqGrid整个选项options。

 

 

 

2. getRowData

 

这个方法用来获得某行的数据。它具有一个rowid参数,jqGrid会根据这个rowid返回对应行的数据,返回的是name:value类型的数组。例如:

 

  1. var getContact = function() {  
  2.     var selectedId = $("#gridTable").jqGrid("getGridParam""selrow");  
  3.       
  4.     var rowData = $("#gridTable").jqGrid("getRowData", selectedId);  
  5.       
  6.     alert("First Name: " + rowData.firstName);  
  7. };  

 

 

如果rowid未能被找到,则返回一个空数组;如果未设置rowid参数,则以数组的形式返回Grid的所有行数据。

 

 

 

3. addRowData

 

这个方法用于向Grid中插入新的一行。执行成功返回true,否则返回false。它具有4个参数:

  • rowid :新行的id号;
  • data :新行的数据对象,形式为{name1:value1,name2: value2…},其中name为colModel中定义的列名称name;
  • position :插入的位置(first:表格顶端;last:表格底端;before:srcrowid之前;after:srcrowid之后);
  • srcrowid :新行将插入到srcrowid指定行的前面或后面。

例如:

 

  1. var addContact = function() {  
  2.     var selectedId = $("#gridTable").jqGrid("getGridParam""selrow");  
  3.       
  4.     var dataRow = {   
  5.         id : 99,  
  6.         lastName : "Zhang",  
  7.         firstName : "San",  
  8.         email : "zhang_san@126.com",  
  9.         telNo : "0086-12345678"  
  10.     };  
  11.       
  12.     if (selectedId) {  
  13.         $("#gridTable").jqGrid("addRowData", 99, dataRow, "before", selectedId);  
  14.           
  15.     } else {  
  16.         $("#gridTable").jqGrid("addRowData", 99, dataRow, "first");  
  17.           
  18.     }  
  19. };  

 

 

这个方法可以一次性插入多行,data参数必须是[{name1:value1,name2: value2…}, {name1:value1,name2: value2…}]这样的数组形式,而且rowid参数也应该设为data参数对象中代表id的field名称。不过,此时的rowid不用必须是 colModel中的一部分。
例如:

 

  1. var addContact = function() {  
  2.     var selectedId = $("#gridTable").jqGrid("getGridParam""selrow");  
  3.       
  4.     var dataRow = [{      
  5.         id : 99,  
  6.         lastName : "Zhang",  
  7.         firstName : "San",  
  8.         email : "zhang_san@126.com",  
  9.         telNo : "0086-12345678"  
  10.     },  
  11.     {     
  12.         id : 100,  
  13.         lastName : "Li",  
  14.         firstName : "Si",  
  15.         email : "li_si@126.com",  
  16.         telNo : "0086-12345678"  
  17.     },  
  18.     {     
  19.         id : 101,  
  20.         lastName : "Wang",  
  21.         firstName : "Wu",  
  22.         email : "wang_wu@126.com",  
  23.         telNo : "0086-12345678"  
  24.     }];  
  25.       
  26.     if (selectedId) {  
  27.         $("#gridTable").jqGrid("addRowData""id", dataRow, "before", selectedId);  
  28.           
  29.     } else {  
  30.         $("#gridTable").jqGrid("addRowData""id", dataRow, "first");  
  31.           
  32.     }  
  33. };  

 

 

注:我测试了一下,一次插入多行的情况下,用于设置插入位置的后两个参数,似乎没有起作用。插入的几行数据都被置于Grid的底端。

 

 

 

4. setRowData

这个方法用于为某行数据设置数据值。执行成功返回true,否则返回false。它具有3个参数:

  • rowid :更新数据的行id;
  • data :更新的数据对象,形式为{name1:value1,name2: value2…},其中name为colModel中定义的列名称name;这个数据对象,不必设置完全,需要更新哪列,就设置哪列的name:value对;
  • cssprop :如果cssprop为String类型,则会使用jQuery的addClass为行增加相应名称的CSS类;如果为object类型,则会使用html的css属性,为行添加样式。如果只想增加css样式而不更新数据,可以将data参数设为false。

例如:

 

  1. var updateContact = function() {  
  2.     var selectedId = $("#gridTable").jqGrid("getGridParam""selrow");  
  3.       
  4.     var dataRow = {  
  5.         lastName : "Li",  
  6.         firstName : "Si",  
  7.         email : "li_si@126.com"   
  8.     };  
  9.       
  10.     var cssprop = {  
  11.         color : "#FF0000"  
  12.     };  
  13.       
  14.     $("#gridTable").jqGrid('setRowData', selectedId, dataRow, cssprop);  
  15. };  

 

 

 

 

5. delRowData

 

这个方法用于删除某行数据。执行成功返回true,否则返回false。具有一个参数rowid,代表要删除的行id。例如:

 

  1. var deleteContact = function() {  
  2.     var selectedId = $("#gridTable").jqGrid("getGridParam""selrow");  
  3.       
  4.     $("#gridTable").jqGrid('delRowData', selectedId);  
  5. };  

 

 

 

 

 

6. setGridParam

 

这个方法与getGridParam对应,用于设置jqGrid的options选项。返回jqGrid对象。参数为 {name1:value1,name2: value2…}形式的对象(name来自jqGrid的options选项名)。某些选项在设置之后需要trigger("reloadGrid"), 才能显示出效果。

例如:

 

  1. var changeGridOptions = function() {  
  2.     $("#gridTable").jqGrid("setGridParam", {  
  3.         rowNum: 50,  
  4.         page: 16  
  5.     }).trigger('reloadGrid');  
  6. };  

 

 

注:我测试了一下,这个方法对于设置jqGrid的caption选项似乎无效。大概因此有了setCaption方法。

 

 

 

 

7. setGridWidth

 

为Grid动态地设定一个新的宽度。两个参数:

  • new_width :以px为单位的新宽度值;
  • shrink :作用与jqGrid的shrinkToFit选项相同;如果此参数未设置,则沿用jqGrid的shrinkToFit选项的值。

 

 

 

8. trigger("reloadGrid")

 

根据当前设置,重新载入Grid表格,即意味着向Server发送一个新的请求。此方法只能用于已经构建好的Grid。此外,此方法不会使对colModel所做出的改变生效。应该使用gridUnload来重新载入对colModel的新设置。

 

 

 

9. 其他方法

 

除了以上介绍的的方法外,jqGrid还有其他有用的方法,例如:
addJSONData、clearGridData、hideCol、resetSelection、setCaption、setGridHeight、setLabel、showCol等
以及增强模块提供的方法,例如:
filterGrid、GridDestroy、GridUnload、setColProp等。

这些方法的具体用法,或浅显易懂,或不是非常常用。都可以参考官方文档(http://www.trirand.com/jqgridwiki/doku.php?id=wiki:methods ),得到具体指示。

 

 

 

10. 额外的考虑

 

在上面介绍的增删改数据行的操作中,jqGrid实际上完成的只是客户端的操作,主要是DOM的更改工作。但是如果传到Server的请求失败了,或者没有得到想要的返回结果,那jqGrid的处理还继续吗?会不会和Server端的数据不同步了呢?
这个问题在下一篇中再讨论吧。

 

 

 

 

 

注: 本篇中介绍的方法在jqGrid的Demo中也有介绍,但是我觉得还是自己的实例看起来更直观,更适合自己理解。

附上代码:

 

javascript部分:

 

  1. $(function(){  
  2.     // 配置jqGrid组件  
  3.     $("#gridTable").jqGrid({  
  4.         url: "jqGrid01.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,sortable:false},  
  12.               {name:"firstName",index:"firstName",label:"名",width:80,sortable:false},  
  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.     });  
  30. });  
  31. var echoSelRow = function() {  
  32.     var id = $("#gridTable").jqGrid("getGridParam""selrow");  
  33.       
  34.     alert("当前选中行ID:" + id);  
  35. };  
  36. var getContact = function() {  
  37.     var selectedId = $("#gridTable").jqGrid("getGridParam""selrow");  
  38.       
  39.     var rowData = $("#gridTable").jqGrid("getRowData", selectedId);  
  40.       
  41.     alert("First Name: " + rowData.firstName);  
  42. };  
  43. var addContact = function() {  
  44.     var selectedId = $("#gridTable").jqGrid("getGridParam""selrow");  
  45.       
  46.     var dataRow = {   
  47.         id : 99,  
  48.         lastName : "Zhang",  
  49.         firstName : "San",  
  50.         email : "zhang_san@126.com",  
  51.         telNo : "0086-12345678"  
  52.     };  
  53.       
  54.     if (selectedId) {  
  55.         $("#gridTable").jqGrid("addRowData", 99, dataRow, "before", selectedId);  
  56.           
  57.     } else {  
  58.         $("#gridTable").jqGrid("addRowData", 99, dataRow, "first");  
  59.           
  60.     }  
  61. };  
  62. var updateContact = function() {  
  63.     var selectedId = $("#gridTable").jqGrid("getGridParam""selrow");  
  64.       
  65.     var dataRow = {  
  66.         lastName : "Li",  
  67.         firstName : "Si",  
  68.         email : "li_si@126.com"   
  69.     };  
  70.       
  71.     var cssprop = {  
  72.         color : "#FF0000"  
  73.     };  
  74.       
  75.     $("#gridTable").jqGrid('setRowData', selectedId, dataRow, cssprop);  
  76. };  
  77. var deleteContact = function() {  
  78.     var selectedId = $("#gridTable").jqGrid("getGridParam""selrow");  
  79.       
  80.     $("#gridTable").jqGrid('delRowData', selectedId);  
  81. };  
  82. var changeGridOptions = function() {  
  83.     $("#gridTable").jqGrid("setGridParam", {  
  84.         rowNum: 50,  
  85.         page: 16  
  86.     }).trigger('reloadGrid');  
  87.       
  88.     $("#gridTable").jqGrid("setCaption""Contact List").trigger('reloadGrid');  
  89.       
  90.     alert($("#gridTable").jqGrid("getGridParam""caption"));  
  91.     alert($("#gridTable").jqGrid("getGridParam""rowNum"));  
  92. };  
  93. var resetWidth = function() {  
  94.     $("#gridTable").jqGrid("setGridWidth", 300, false);  
  95. };  

 

 

 

html部分:

 

  1. <!DOCTYPE html  
  2. PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"  
  3. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  4. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-CN" lang="zh-CN">  
  5.     <head>  
  6.         <title>jqGrid02</title>  
  7.         <link rel="stylesheet" type="text/css" media="screen" href="../css/themes/aero/jquery-ui-1.8.1.custom.css" mce_href="css/themes/aero/jquery-ui-1.8.1.custom.css" />  
  8.         <link rel="stylesheet" type="text/css" media="screen" href="../css/themes/aero/ui.jqgrid.custom.css" mce_href="css/themes/aero/ui.jqgrid.custom.css" />  
  9.           
  10.         <mce:script type="text/javascript" src="../js/jquery-1.4.2.min.js" mce_src="js/jquery-1.4.2.min.js"></mce:script>  
  11.         <mce:script src="../js/jquery-ui-1.8.1.custom.min.js" mce_src="js/jquery-ui-1.8.1.custom.min.js" type="text/javascript"></mce:script>  
  12.         <mce:script src="../js/i18n/grid.locale-zh-CN.js" mce_src="js/i18n/grid.locale-zh-CN.js" type="text/javascript"></mce:script>  
  13.         <mce:script src="../js/jquery.jqGrid.min.js" mce_src="js/jquery.jqGrid.min.js" type="text/javascript"></mce:script>  
  14.           
  15.         <mce:script src="js/jqGrid02.js" mce_src="js/jqGrid02.js" type="text/javascript"></mce:script>    
  16.     </head>  
  17.     <body>  
  18.         <h3>  
  19.             jqGrid测试 02  
  20.         </h3>  
  21.         <div>  
  22.             <table id="gridTable"></table>  
  23.             <div id="gridPager"></div>  
  24.         </div>  
  25.           
  26.         <br />  
  27.           
  28.         <div>  
  29.             <button onclick="echoSelRow()">当前行ID</button>  
  30.             <button onclick="getContact()">当前联系人</button>  
  31.             <button onclick="addContact()">添加行</button>  
  32.             <button onclick="updateContact()">修改行</button>  
  33.             <button onclick="deleteContact()">删除行</button>  
  34.             <button onclick="changeGridOptions()">改变Grid选项</button>  
  35.             <button onclick="resetWidth()">改变Grid宽度</button>  
  36.         </div>  
  37.     </body>  
  38. </html>
分享到:
评论

相关推荐

    jqgrid4.6.zip

    "Jqgrid之onSelectRow 和onCellSelect 事件不能一起用-yellowcong_yelllowcong的专栏-CSDN博客_files"和"jQuery学习笔记--JqGrid相关操作 方法列表 备忘 重点讲解(超重要)_web开发自学-CSDN博客_files"以及"jqgrid...

    jqgrid全套示例代码

    5. **bin**:在ASP.NET中,这个文件夹用于存放编译后的程序集(DLLs),可能包括jqGrid相关的服务器端组件或自定义的业务逻辑代码。通过这些文件,开发者可以了解后端与jqGrid交互的方式。 6. **themes**:这个...

    jqgrid celledit

    jqGrid 是一个基于 jQuery 的数据网格插件,用于在网页上展示和操作大量结构化数据。在"jqgrid celledit"的上下文中,我们主要关注的是jqGrid的单元格编辑功能,这是一个允许用户直接在表格中编辑单个单元格的数据的...

    jqGrid模板

    在实际开发过程中,根据【压缩包子文件的文件名称列表】中的"jqGrid模板",我们可以预见到这个模板可能包含了jqGrid的示例代码、配置文件、样式文件以及相关的文档,这些资源可以帮助开发者快速理解和应用jqGrid,...

    jqGrid表格属性大全

    jqGrid是基于jQuery的表格控件库,它提供了许多有用的属性和方法来操作HTML表格。下面是jqGrid表格属性大全的详细介绍: Table对象 Table对象是jqGrid中的一个基本对象,表示HTML文档中的表,对于文档中每个标记,...

    jqGrid-3.5.alfa-2

    2. **masterex.html**:这个文件可能包含主从网格的示例,主网格显示主要数据,从网格则展示与主数据相关的详细信息,例如,一个部门的员工列表,点击部门名称可以展开显示该部门的员工详情。 3. **custbutt.html**...

    ThinkPHP_JqGrid_Dev_Beginner

    同时,JqGrid是一款功能丰富的JavaScript数据网格组件,用于展示和操作大量数据,提供丰富的交互性和自定义功能。将ThinkPHP与JqGrid相结合,可以构建出高效且用户体验优秀的数据管理应用。本指南将深入探讨如何在...

    jquery、jqGrid

    3. **初始化jqGrid**:通过JavaScript调用`$("#gridId").jqGrid()`方法,设置相关参数,如数据源、列定义、分页选项等。 4. **配置列**:每个列可以通过`colModel`参数定义,包括列名、宽度、是否可编辑、对齐方式...

    jqGrid属性中文详细说明

    **描述:** 此属性用于配置下拉列表(select元素)通过Ajax方式加载数据的相关选项。 **属性详情:** - **类型**: Object - **默认值**: 空对象 - **配置项**: - `dataUrl`: 指定获取下拉列表数据的URL。 - `...

    jqGrid4.3.2 及其相关的demo

    **jqGrid4.3.2及其相关Demo详解** jqGrid是一款在Web开发中广泛使用的开源JavaScript组件,专门用于创建交互式、数据丰富的表格。在版本4.3.2中,jqGrid提供了许多强大的功能,包括但不限于排序、分组、分页、行内...

    jqgrid学习笔记

    在页面中,你需要初始化 jqGrid,设置其属性和回调函数,然后调用 `$("#gridId").jqGrid()` 方法创建表格。例如,你可能需要设置列的标题、宽度和格式化函数,以及定义加载数据时的回调函数。 7. **功能扩展**: ...

    jquery ui tabs_jqgrid demo

    jqGrid是一个功能强大的数据网格插件,能够以表格的形式展示大量数据,并提供排序、分页、搜索、编辑等多种操作。它是基于jQuery的,易于集成到现有的Web应用中。 **用途**: 适用于需要展示复杂数据列表、数据管理...

    jqGrid与Sturts2的结合例子

    - `StudentAction.java`:Struts2 Action类,处理与学生数据相关的请求,如获取列表、保存更新、删除等。 - `struts.xml`:Struts2的配置文件,定义Action及其结果映射。 - `Student.js`:可能包含辅助的...

    JQuery插件jqGrid常用属性说明.docx

    引入jqGrid需要加载jQuery库和jqGrid相关的JavaScript文件,如`jquery.js`、`jquery.jqGrid.js`、`jqModal.js`等。考虑到性能优化,建议按需动态加载这些脚本文件,以减少页面初始化时间。 3. **基本配置**: ...

    jQuery插件jqGrid动态获取列和列字段的方法

    jqGrid是一款基于jQuery的表格插件,用于展示和操作数据,具有丰富的功能,如分页、排序、筛选等。在本文中,我们将探讨如何在jqGrid中动态获取列和列字段,这对于创建自定义功能或者根据用户需求动态展示数据非常...

    Jqgrid之强大的表格插件应用

    4. **初始化jqGrid**:在页面中使用JavaScript调用jqGrid插件,配置相关参数,例如表格标题、数据源URL、数据类型、列名、列模型、分页设置等。 例如: ```javascript $("#list").jqGrid({ caption: '手机产品列表...

    webget 列表修改

    "webget 列表修改"可能是指通过WebGET请求从服务器获取数据,然后更新到jqGrid中,这通常涉及到AJAX技术,允许页面在不刷新的情况下与服务器进行异步通信。 在jqGrid中,`jqxgrid.pager.js`和`jqxgrid.js`是两个...

    jQuery实现在列表的首行添加数据

    以上,本文档详细介绍了使用jQuery在列表的首行添加数据的方法,并通过示例讲解了如何处理用户输入,向textarea文本域动态添加数据。此外,还涉及了HTML基本元素、事件监听与处理、字符串操作等前端开发相关的知识点...

    归档-jquery-grid懒加载.zip

    这个“归档-jquery-grid懒加载.zip”文件包含的资源显然与使用jqGrid实现数据的懒加载功能有关。懒加载,或称为按需加载,是一种优化网页性能的技术,它只在用户滚动到页面的特定部分时才加载额外的数据,而不是一次...

Global site tag (gtag.js) - Google Analytics