﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-kangdy-随笔分类-JQuery</title><link>http://www.blogjava.net/kangdy/category/49949.html</link><description>我就像AK47里打出去的子弹。目标TMD永远在前方。我只能TMD拼命向前。</description><language>zh-cn</language><lastBuildDate>Wed, 16 Nov 2011 10:51:35 GMT</lastBuildDate><pubDate>Wed, 16 Nov 2011 10:51:35 GMT</pubDate><ttl>60</ttl><item><title>(转贴) jqGrid整理</title><link>http://www.blogjava.net/kangdy/archive/2011/11/01/362440.html</link><dc:creator>AK47</dc:creator><author>AK47</author><pubDate>Tue, 01 Nov 2011 06:23:00 GMT</pubDate><guid>http://www.blogjava.net/kangdy/archive/2011/11/01/362440.html</guid><wfw:comment>http://www.blogjava.net/kangdy/comments/362440.html</wfw:comment><comments>http://www.blogjava.net/kangdy/archive/2011/11/01/362440.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kangdy/comments/commentRss/362440.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kangdy/services/trackbacks/362440.html</trackback:ping><description><![CDATA[原帖地址： <a href="http://www.cnblogs.com/mycoding/archive/2011/07/07/2099878.html"><div>http://www.cnblogs.com/mycoding/archive/2011/07/07/2099878.html</div></a><br /><div> 	<div id="cnblogs_post_body"><p><strong>一、 </strong><strong>jqGrid</strong><strong>的加载。</strong>  </p><p><strong>1.</strong><strong>引用相关头文件</strong>  </p><p>引入CSS：  </p><p>&lt;link href="Scripts/jquery-ui-1.8.1.custom.css" rel="stylesheet" type="text/css" /&gt;  </p><p>&lt;link href="Scripts/ui.jqgrid.css" rel="stylesheet" type="text/css" /&gt;  </p><p>引入JS：  </p><p>&lt;script src="Scripts/jquery-1.5.1.js" type="text/javascript"&gt;&lt;/script&gt;  </p><p>&lt;script src="Scripts/jquery-ui.min.js" type="text/javascript"&gt;&lt;/script&gt;  </p><p>&lt;script src="Scripts/grid.locale-en.js" type="text/javascript"&gt;&lt;/script&gt;  </p><p>&lt;script src="Scripts/jquery.jqGrid.min.js" type="text/javascript"&gt;&lt;/script&gt;  </p><p>因为jqGrid3.6及以后的版本集成了jQuery UI，所以，此处需要导入UI相关js和css。另外grid.locale-en.js这个语言文件必须在jquery.jqGrid.min.js之前加载，否则会出问题。  </p><p><strong>2.</strong><strong>将jqgrid加入页面中</strong>  </p><p>根据jqGrid的文档，要想生成一个jqGrid，最直接的方法就是：  </p><p>$("#list").jqGrid(options);  </p><p>其中list是页面上的一个table：&lt;table id="list"&gt;&lt;/table&gt;  </p><p>下面是一个简单的例子：  </p><div><pre>&lt;script type="text/javascript"&gt;</pre><pre>&nbsp;</pre><pre>$(document).ready(function () {</pre><pre>&nbsp;</pre><pre>jQuery("#list").jqGrid({</pre><pre>&nbsp;</pre><pre>url: 'Handler.ashx',</pre><pre>&nbsp;</pre><pre>datatype: "json",</pre><pre>&nbsp;</pre><pre>mtype: 'GET',</pre><pre>&nbsp;</pre><pre>colNames: ['SalesReasonID', 'Name', 'ReasonType', 'ModifiedDate'],</pre><pre>&nbsp;</pre><pre>colModel: [</pre><pre>&nbsp;</pre><pre>{ name: 'SalesReasonID', index: 'SalesReasonID', width: 40, align: "left", editable: true },</pre><pre>&nbsp;</pre><pre>{ name: 'Name', index: 'Name', width: 100, align: "center" },</pre><pre>&nbsp;</pre><pre>{ name: 'ReasonType', index: 'ReasonType', width: 100, align: "center" },</pre><pre>&nbsp;</pre><pre>{ name: 'ModifiedDate', index: 'ModifiedDate', width: 150, align: "center", search: false }</pre><pre>&nbsp;</pre><pre>],</pre><pre>&nbsp;</pre><pre>rowList: [10, 20, 30],</pre><pre>&nbsp;</pre><pre>sortname: 'SalesReasonID',</pre><pre>&nbsp;</pre><pre>viewrecords: true,</pre><pre>&nbsp;</pre><pre>sortorder: "desc",</pre><pre>&nbsp;</pre><pre>jsonReader: {</pre><pre>&nbsp;</pre><pre>root: "griddata",</pre><pre>&nbsp;</pre><pre>total: "totalpages",</pre><pre>&nbsp;</pre><pre>page: "currpage",</pre><pre>&nbsp;</pre><pre>records: "totalrecords",</pre><pre>&nbsp;</pre><pre>repeatitems: false</pre><pre>&nbsp;</pre><pre>},</pre><pre>&nbsp;</pre><pre>pager: jQuery('#pager'),</pre><pre>&nbsp;</pre><pre>rowNum: 5,</pre><pre>&nbsp;</pre><pre>altclass: 'altRowsColour',</pre><pre>&nbsp;</pre><pre>//width: 'auto',</pre><pre>&nbsp;</pre><pre>width: '500',</pre><pre>&nbsp;</pre><pre>height: 'auto',</pre><pre>&nbsp;</pre><pre>caption: "DemoGrid"</pre><pre>&nbsp;</pre><pre>}).navGrid('#pager', { add: true, edit: true, del: true,search:false,refresh:false }); ;</pre><pre>&nbsp;</pre><pre>})</pre></div>   <p><strong>二、 </strong><strong>jqgrid</strong><strong>的重要选项</strong>  </p><p>具体的options参考，可以访问jqGrid文档关于option的章节（http://www.trirand.com/jqgridwiki/doku.php?id=wiki:options）。其中有几个是比较常用的，重点介绍一下：  </p><ul><li><strong>url</strong> ：jqGrid控件通过这个参数得到需要显示的数据，具体的返回值可以使XML也可以是Json。  </li><li><strong>datatype</strong> ：这个参数用于设定将要得到的数据类型。类型包括：json 、xml、xmlstring、local、javascript、function。  </li><li><strong>mtype</strong> : 定义使用哪种方法发起请求，GET或者POST。  </li><li><strong>height</strong> ：Grid的高度，可以接受数字、%值、auto，默认值为150。  </li><li><strong>width</strong> ：Grid的宽度，如果未设置，则宽度应为所有列宽的之和；如果设置了宽度，则每列的宽度将会根据shrinkToFit选项的设置，进行设置。  </li><li><strong>shrinkToFit</strong>  ：此选项用于根据width计算每列宽度的算法。默认值为true。如果shrinkToFit为true且设置了width值，则每列宽度会根据 width成比例缩放；如果shrinkToFit为false且设置了width值，则每列的宽度不会成比例缩放，而是保持原有设置，而Grid将会有 水平滚动条。  </li><li><strong>autowidth</strong> ：默认值为false。如果设为true，则Grid的宽度会根据父容器的宽度自动重算。重算仅发生在Grid初始化的阶段；如果当父容器尺寸变化了，同时也需要变化Grid的尺寸的话，则需要在自己的代码中调用setGridWidth方法来完成。  </li><li><strong>pager</strong> ：定义页码控制条Page Bar，在上面的例子中是用一个div(&lt;div id=&#8221;pager&#8221;&gt;&lt;/div&gt;)来放置的。  </li><li><strong>sortname</strong> ：指定默认的排序列，可以是列名也可以是数字。此参数会在被传递到Server端。  </li><li><strong>viewrecords</strong> ：设置是否在Pager Bar显示所有记录的总数。  </li><li><strong>caption</strong> ：设置Grid表格的标题，如果未设置，则标题区域不显示。  </li><li><strong>rowNum</strong> ：用于设置Grid中一次显示的行数，默认值为20。正是这个选项将参数rows（prmNames中设置的）通过url选项设置的链接传递到Server。注意如果Server返回的数据行数超过了rowNum的设定，则Grid也只显示rowNum设定的行数。  </li><li><strong>rowList</strong> ：一个数组，用于设置Grid可以接受的rowNum值。例如[10,20,30]。  </li><li><strong>colNames</strong> ：字符串数组，用于指定各列的题头文本，与列的顺序是对应的。  </li><li><strong>colModel</strong> ：最重要的数组之一，用于设定各列的参数。（稍后详述）  </li><li><strong>prmNames</strong> ：这是一个数组，用于设置jqGrid将要向Server传递的参数名称。（稍后详述）  </li><li><strong>jsonReader</strong> ：这又是一个数组，用来设定如何解析从Server端发回来的json数据。（稍后详述）</li></ul> <p><strong>2.1 prmNames</strong><strong>选项</strong>  </p><p>prmNames是jqGrid的一个重要选项，用于设置jqGrid将要向Server传递的参数名称。其默认值为：<strong></strong>  </p><p>prmNames : {  </p><p>page:"page", // 表示请求页码的参数名称  </p><p>rows:"rows", // 表示请求行数的参数名称  </p><p>sort: "sidx", // 表示用于排序的列名的参数名称  </p><p>order: "sord", // 表示采用的排序方式的参数名称  </p><p>search:"_search", // 表示是否是搜索请求的参数名称  </p><p>nd:"nd", // 表示已经发送请求的次数的参数名称  </p><p>id:"id", // 表示当在编辑数据模块中发送数据时，使用的id的名称  </p><p>oper:"oper", // operation参数名称  </p><p>editoper:"edit", // 当在edit模式中提交数据时，操作的名称  </p><p>addoper:"add", // 当在add模式中提交数据时，操作的名称  </p><p>deloper:"del", // 当在delete模式中提交数据时，操作的名称  </p><p>subgridid:"id", // 当点击以载入数据到子表时，传递的数据名称  </p><p>npage: null,  </p><p>totalrows:"totalrows" // 表示需从Server得到总共多少行数据的参数名称，参见jqGrid选项中的rowTotal  </p><p>}  </p><p><strong>2.2 </strong><strong></strong><strong>jsonReader</strong><strong>选项</strong>  </p><p>jsonReader是jqGrid的一个重要选项，用于设置如何解析从Server端发回来的json数据，如果Server返回的是xml数据，则对应的使用xmlReader来解析。jsonReader的默认值为：  </p><p>jsonReader : {  </p><p>root: "rows", // json中代表实际模型数据的入口  </p><p>page: "page", // json中代表当前页码的数据  </p><p>total: "total", // json中代表页码总数的数据  </p><p>records: "records", // json中代表数据行总数的数据  </p><p>repeatitems: true, // 如果设为false，则jqGrid在解析json时，会根据name来搜索对应的数据元素（即可以json中元素可以不按顺序）；而所使用的name是来自于colModel中的name设定。  </p><p>cell: "cell",  </p><p>id: "id",  </p><p>userdata: "userdata",  </p><p>subgrid: {  </p><p>root:"rows",  </p><p>repeatitems: true,  </p><p>cell:"cell"  </p><p>}  </p><p>}  </p><p>假如有下面一个json字符串：  </p><p>{"totalpages":"3","currpage":"1","totalrecords":"11","griddata": [{"SalesReasonID":"1","Name":"Price","ReasonType":"Other","ModifiedDate":"1998 年6月1日"},{"SalesReasonID":"2","Name":"On  Promotion","ReasonType":"Promotion","ModifiedDate":"1998年6月1日"}, {"SalesReasonID":"3","Name":"Magazine  Advertisement","ReasonType":"Marketing","ModifiedDate":"1998年6月1日"}, {"SalesReasonID":"4","Name":"Television  Advertisement","ReasonType":"Marketing","ModifiedDate":"1998年6月1日"}, {"SalesReasonID":"5","Name":"Manufacturer","ReasonType":"Other","ModifiedDate":"1998 年6月1日"}]}  </p><p>其对应的jsonReader为：jsonReader: {  </p><p>root: "griddata",  </p><p>total: "totalpages",  </p><p>page: "currpage",  </p><p>records: "totalrecords",  </p><p>repeatitems: false  </p><p>}  </p><p>注：cell、id在repeatitems为true时可以用到，即每一个记录是由一对id和cell组合而成，即可以适用另一种json结构。援引文档中的例子：  </p><p>repeatitems为true时：  </p><p>jQuery("#gridid").jqGrid({&nbsp;&nbsp; </p><p>&nbsp;&nbsp;&nbsp;&nbsp; ...&nbsp;&nbsp; </p><p>&nbsp;&nbsp;&nbsp;&nbsp; jsonReader : {&nbsp;&nbsp; </p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; root:"invdata",&nbsp;&nbsp; </p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; page: "currpage",&nbsp;&nbsp; </p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; total: "totalpages",&nbsp;&nbsp; </p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; records: "totalrecords"  </p><p>&nbsp;&nbsp;&nbsp;&nbsp; },&nbsp;&nbsp; </p><p>&nbsp;&nbsp;&nbsp;&nbsp; ...&nbsp;&nbsp; </p><p>});&nbsp;&nbsp; </p><p>json结构为：  </p><p>{&nbsp;&nbsp;&nbsp; </p><p>"totalpages": "xxx",&nbsp;&nbsp;&nbsp; </p><p>"currpage": "yyy",&nbsp;&nbsp; </p><p>"totalrecords": "zzz",&nbsp;&nbsp; </p><p>"invdata" : [&nbsp;&nbsp; </p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {"id" :"1", "cell" :["cell11", "cell12", "cell13"]},&nbsp;&nbsp; // cell中不需要各列的name，只要值就OK了，但是需要保持对应  </p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {"id" :"2", "cell" :["cell21", "cell22", "cell23"]},&nbsp;&nbsp; </p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...&nbsp;&nbsp; </p><p>&nbsp;&nbsp;&nbsp;&nbsp; ]&nbsp;&nbsp; </p><p>}&nbsp;&nbsp; </p><p>repeatitems为false时：  </p><p>jQuery("#gridid").jqGrid({&nbsp;&nbsp; </p><p>&nbsp;&nbsp;&nbsp;&nbsp; ...&nbsp;&nbsp; </p><p>&nbsp;&nbsp;&nbsp;&nbsp; jsonReader : {&nbsp;&nbsp; </p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; root:"invdata",&nbsp;&nbsp; </p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; page: "currpage",&nbsp;&nbsp; </p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; total: "totalpages",&nbsp;&nbsp; </p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; records: "totalrecords",&nbsp;&nbsp; </p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; repeatitems: <strong>false</strong>,&nbsp;&nbsp; </p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id: "0"  </p><p>&nbsp;&nbsp;&nbsp;&nbsp; },&nbsp;&nbsp; </p><p>&nbsp;&nbsp;&nbsp;&nbsp; ...&nbsp;&nbsp; </p><p>});&nbsp;&nbsp; </p><p>json结构为：  </p><p>{&nbsp;&nbsp;&nbsp; </p><p>"totalpages" : "xxx",&nbsp;&nbsp;&nbsp; </p><p>"currpage" : "yyy",&nbsp;&nbsp; </p><p>"totalrecords" : "zzz",&nbsp;&nbsp; </p><p>"invdata" : [&nbsp;&nbsp; </p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {"invid" : "1","invdate":"cell11", "amount" :"cell12", "tax" :"cell13",  "total" :"1234", "note" :"somenote"}, // 数据中需要各列的name，但是可以不按列的顺序  </p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {"invid" : "2","invdate":"cell21", "amount"  :"cell22", "tax" :"cell23", "total" :"2345", "note" :"some note"},&nbsp;&nbsp; </p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...&nbsp;&nbsp; </p><p>&nbsp;&nbsp;&nbsp;&nbsp; ]&nbsp;&nbsp; </p><p>}&nbsp;&nbsp; </p><p><strong></strong> </p><p><strong>2.3 colModel</strong><strong>的重要选项</strong><strong> </strong> </p><p>colModel也有许多非常重要的选项，在使用搜索、排序等方面都会用到。这里先只说说最基本的。  </p><ul><li><strong>name</strong> ：为Grid中的每个列设置唯一的名称，这是一个必需选项，其中保留字包括subgrid、cb、rn。  </li><li><strong>index</strong><strong> </strong>：设置排序时所使用的索引名称，这个index名称会作为sidx参数（prmNames中设置的）传递到Server。  </li><li><strong>label</strong> ：当jqGrid的colNames选项数组为空时，为各列指定题头。如果colNames和此项都为空时，则name选项值会成为题头。  </li><li><strong>width</strong> ：设置列的宽度，目前只能接受以px为单位的数值，默认为150。  </li><li><strong>sortable</strong> ：设置该列是否可以排序，默认为true。  </li><li><strong>search</strong> ：设置该列是否可以被列为搜索条件，默认为true。  </li><li><strong>resizable</strong> ：设置列是否可以变更尺寸，默认为true。  </li><li><strong>hidden</strong> ：设置此列初始化时是否为隐藏状态，默认为false。  </li><li><strong>formatter</strong> ：预设类型或用来格式化该列的自定义函数名。常用预设格式有：integer、date、currency、number等（<a href="http://www.trirand.com/jqgridwiki/doku.php?id=wiki:predefined_formatter">具体参见文档</a> ）。</li></ul> <p><strong>三、 </strong><strong>注意事项</strong>  </p><p>1. 动态改变Add Form或者Edit Form中的select的内容，如：改变下图中的Comparator下拉中的内容。  </p><p><a href="http://images.cnblogs.com/cnblogs_com/mycoding/201107/201107071118228550.jpg"><img title="clip_image002" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" alt="clip_image002" src="http://images.cnblogs.com/cnblogs_com/mycoding/201107/201107071118267498.jpg" border="0" height="123" width="244" /></a>  </p><p>$("#list_d").navGrid('#pager_d',{add:true,edit:true,del:true,search:false,refresh:false},  </p><p>{  </p><p>checkOnSubmit:false, closeAfterEdit: true,recreateForm:true,  </p><p>beforeInitData:function(formid){  </p><p>initComparator();  </p><p>},  </p><p>beforeShowForm: function(formid){  </p><p>$("#list_d").jqGrid('setColProp', 'Name', { editrules:{required:false},});  </p><p>$('#tr_Name', formid).hide();  </p><p>}  </p><p>}，//edit  </p><p>{},//add  </p><p>{}//del  </p><p>）  </p><p>beforeInitData,  beforeShowForm在每次点击编辑的时候都会执行。initComparator的作用是通过ajax获取数据，然后利 用$("#list_d").jqGrid('setColProp', 'Comparator', { editoptions: { value:  valueString} });来设置Comparator下拉中的内容。其中valueString的格式如下&#8217; equal to: equal  to; not equal to: not equal  to&#8217;。键值之间用冒号隔开，2项之间用分号隔开。注意：把recreateForm设为true，否则'setColProp'只在第一次调用时有效。   </p><p>2. var rowNum = parseInt($(this).getGridParam("records"), 10); 得到数据条数。  </p><p>3. jQuery("#list_d").clearGridData();清空数据。  </p><p>4. jQuery("#list").getCell(ids,"Key");获取第ids行的key列。  </p><p>5. $("#list").jqGrid('setSelection',  "1");选中第一行。放在loadComplete：中在gird加载完成的时候自动选中第一行。 loadComplete:function(data){$("#list").jqGrid('setSelection', "1");  </p><p>}  </p><p>6. 对于像1中的可编辑的字段，可以设定rule，参见<a href="http://www.trirand.com/jqgridwiki/doku.php?id=wiki:common_rules#editrules">http://www.trirand.com/jqgridwiki/doku.php?id=wiki:common_rules#editrules</a>  </p><p>7. 修改Option，以URL为例  </p><p>jQuery("#list_d").jqGrid('setGridParam',{url:"xxx.aspx",page:1}).trigger('reloadGrid'); <br /></p><p><br /></p><p><strong><span style="color: #ff0000;">复杂的表格可以参考jquery grid demo网站 ： </span></strong><div><strong><a href="http://www.trirand.com/blog/jqgrid/jqgrid.html"><span style="color: #ff0000;">http://www.trirand.com/blog/jqgrid/jqgrid.html</span></a><br /><span style="color: #ff0000;">有实例，有源码。</span></strong><br /></div><br /></p><p><br /></p><p><br /></p></div></div><img src ="http://www.blogjava.net/kangdy/aggbug/362440.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kangdy/" target="_blank">AK47</a> 2011-11-01 14:23 <a href="http://www.blogjava.net/kangdy/archive/2011/11/01/362440.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>