系列索引
Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引
Web jquery表格组件 JQGrid 的使用 - 4.JQGrid参数、ColModel API、事件及方法
Web jquery表格组件 JQGrid 的使用 - 5.Pager翻页、搜索、格式化、自定义按钮
Web jquery表格组件 JQGrid 的使用 - 6.准备工作 & Hello JQGrid
Web jquery表格组件 JQGrid 的使用 - 7.查询数据、编辑数据、删除数据
Web jquery表格组件 JQGrid 的使用 - 8.Pager、新增数据、查询、刷新、查看数据
Web jquery表格组件 JQGrid 的使用 - 全部代码
Web jquery表格组件 JQGrid 的使用 - 11.问题研究
目录
翻页
5.Pager翻页、搜索、格式化、自定义按钮
翻页
jqGrid的翻页要定义在html里,通常是在grid的下面,且是一个div对象:
<table id="list"></table> <div id="gridpager"></div> jQuery("#grid_id").jqGrid({ ... pager : '#gridpager', ... });
不必给翻页设置任何的css属性。在jqGrid里定义的翻页可以是::pager : '#gridpager', pager : 'gridpager' or pager : jQuery('#gridpager'). 推荐使用前两个,当使用其他方式时jqGrid的导入导出功能时会引起错误。
导航栏的属性:
$.jgrid = { defaults : { recordtext: "View {0} - {1} of {2}", emptyrecords: "No records to view", loadtext: "Loading...", pgtext : "Page {0} of {1}" }, ... }
如果想改变这些设置:
1.
jQuery.extend(jQuery.jgrid.defaults,{emptyrecords: "Nothing to display",...});
2.
jQuery("#grid_id").jqGrid({ ... pager : '#gridpager', emptyrecords: "Nothing to display", ... });
导航栏的属性:
属性名 |
类型 |
说明 |
默认值 |
是否可以被修改 |
lastpage |
integer |
只读属性,总页数 |
0 |
NO |
pager |
mixed |
导航栏对象,必须是一个有效的html元素,位置可以随意 |
空字符串 |
NO |
pagerpos |
string |
定义导航栏的位置,默认分为三部分:翻页,导航工具及记录信息 |
center |
NO |
pgbuttons |
boolean |
是否显示翻页按钮 |
true |
NO |
pginput |
boolean |
是否显示跳转页面的输入框 |
true |
NO |
pgtext |
string |
页面信息,第一个值是当前页第二个值是总页数 |
语言包 |
YES |
reccount |
integer |
只读属性,实际记录数,千万不能跟records 参数搞混了,通常情况下他们是相同的,假如我们定义rowNum=15,但我们从服务器端返回的记录为20即records=20,而reccount=15,表格中也显示15条记录 |
0 |
NO |
recordpos |
string |
定义记录信息的位置,可选值:left, center, right |
right |
NO |
records |
integer |
只读属性,从服务器端返回的记录数 |
none |
NO |
recordtext |
string |
显示记录的信息,只有当viewrecords为true时起效,且记录数必须大于0 |
语言包 |
yes |
rowList |
array |
可以改变表格可以显示的记录数,格式为[10,20,30] |
array |
no |
rowNum |
integer |
设置表格可以显示的记录数 |
20 |
yes |
viewrecords |
boolean |
是否要显示总记录数信息 |
false |
no |
jQuery("#grid_id").setGridParam({rowNum:10}).trigger("reloadGrid");
跟翻页相关的事件只有一个:onPaging
onPaging |
pgButton |
当点击翻页按钮但还为展现数据时触发此事件,当然这跳转栏输入页码改变页时也同样触发此事件。参数pgButton可选值: first,last,prev,next |
jqGrid的翻页导航是一个方法,你可以事先定义一些其他操作,比如:编辑、新增、删除及搜索。也可以增加自定义的函数。导航工具栏是定义到翻页控件上的。定义如下:
<body> ... <table id="list"></table> <div id="gridpager"></div> ... </body> jQuery("#grid_id").jqGrid({ ... pager : '#gridpager', ... }); jQuery("#grid_id").navGrid('#gridpager',{parameters},prmEdit, prmAdd, prmDel, prmSearch, prmView); jQuery("#grid_id").jqGrid({ ... pager : '#gridpager', ... }); jQuery("#grid_id").jqGrid('navGrid','#gridpager',{parameters},prmEdit, prmAdd, prmDel, prmSearch, prmView); jQuery("#grid_id").jqGrid({ ... pager : '#gridpager', ... }).navGrid('#gridpager',{parameters}, prmEdit, prmAdd, prmDel, prmSearch, prmView); ...
grid_id :表格id
gridpager :导航栏id
parameters :参数列表
prmEdit, prmAdd, prmDel, prmSearch, prmView :事件
$.jgrid = { ... search : { caption: "Search...", Find: "Find", Reset: "Reset", odata : ['equal', 'not equal', 'less', 'less or equal','greater','greater or equal', 'begins with','does not begin with','is in','is not in','ends with','does not end with','contains','does not contain'], groupOps: [ { op: "AND", text: "all" }, { op: "OR", text: "any" } ], matchText: " match", rulesText: " rules" }, edit : { addCaption: "Add Record", editCaption: "Edit Record", bSubmit: "Submit", bCancel: "Cancel", bClose: "Close", saveData: "Data has been changed! Save changes?", bYes : "Yes", bNo : "No", bExit : "Cancel", }, view : { caption: "View Record", bClose: "Close" }, del : { caption: "Delete", msg: "Delete selected record(s)?", bSubmit: "Delete", bCancel: "Cancel" }, nav : { edittext: "", edittitle: "Edit selected row", addtext:"", addtitle: "Add new row", deltext: "", deltitle: "Delete selected row", searchtext: "", searchtitle: "Find records", refreshtext: "", refreshtitle: "Reload Grid", alertcap: "Warning", alerttext: "Please, select row", viewtext: "", viewtitle: "View selected row" }, ...
属性 |
类型 |
说明 |
默认值 |
add |
boolean |
是否启用新增功能,当点击按钮时会触发editGridRow事件 |
true |
addicon |
string |
给新增功能设置图标,只有UI theme里的图标才可以使用 |
ui-icon-plus |
addtext |
string |
新增按钮上的文字 |
空 |
addtitle |
string |
当鼠标移到新增按钮上时显示的提示 |
新增一行 |
alertcap |
string |
当我们edit,delete or view一行记录时出现的提示信息 |
警告 |
alerttext |
string |
当edit,delete or view一行记录时的文本提示 |
请选择一行记录 |
closeOnEscape |
boolean |
是否可以使用esc键关闭对话框 |
true |
del |
boolean |
是否启用删除功能,启用时会触发事件delGridRow |
true |
delicon |
string |
设置删除按钮的图标,只有UI theme里的图标才可以使用 |
ui-icon-trash |
deltext |
string |
设置到删除按钮上的文字信息 |
空 |
deltitle |
string |
当鼠标移到删除按钮上时出现的提示 |
删除锁选择的行 |
edit |
boolean |
是否启用可编辑功能,当编辑时会触发事件editGridRow |
true |
editicon |
string |
设置编辑按钮的图标,只有UI theme里的图标才可以使用 |
ui-icon-pencil |
edittext |
string |
编辑按钮上文字 |
空 |
edittitle |
string |
当鼠标移到编辑按钮上出现的提示信息 |
编辑所选择的行 |
position |
string |
定义按钮位置,可选值left, center and right. |
left |
refresh |
boolean |
是否启用刷新按钮,当点击刷新按钮时会触发trigger(“reloadGrid”)事件,而且会清空搜索条件值 |
true |
refreshicon |
string |
设置刷新图标,只有UI theme里的图标才可以使用 |
ui-icon-refresh |
refreshtext |
string |
刷新按钮上文字信息 |
空 |
refreshtitle |
string |
当鼠标移到刷新按钮上的提示信息 |
重新加载 |
refreshstate |
string |
指明表格如何刷新。firstpage:从第一页开始刷新;current:只刷新当前页内容 |
firstpage |
afterRefresh |
function |
当点击刷新按钮之后触发此事件 |
null |
search |
boolean |
是否启用搜索按钮,会触发searchGrid 事件 |
true |
searchhicon |
string |
设置搜索按钮的图标,只有UI theme里的图标才可以使用 |
ui-icon-search |
searchtext |
string |
搜索按钮上的文字 |
空 |
searchtitle |
string |
当鼠标移到搜索按钮上的提示信息 |
搜索 |
view |
boolean |
是否启用查看按钮,会触发事件viewGridRow |
false |
viewicon |
string |
设置查看按钮的图标,只有UI theme里的图标才可以使用 |
ui-icon-document |
viewtext |
string |
查看按钮上文字 |
空 |
viewtitle |
string |
当鼠标移到查看按钮上的提示信息 |
查看所选记录 |
jQuery("#grid_id").jqGrid({ ... pager : '#gridpager', ... }).navGrid('#gridpager',{view:true, del:false}, {}, // use default settings for edit {}, // use default settings for add {}, // delete instead that del:false we need this {multipleSearch : true}, // enable the advanced searching {closeOnEscape:true} /* allow the view dialog to be closed when user press ESC key*/ );
自定义按钮
jQuery("#grid_id").navGrid("#pager",...).navButtonAdd("#pager",{parameters}); jQuery("#grid_id").jqGrid('navGrid',"#pager",...).jqGrid('navButtonAdd',"#pager",{parameters}); { caption:"NewButton", buttonicon:"ui-icon-newwin", onClickButton:null, position: "last", title:"", cursor: "pointer"}
caption:按钮名称,可以为空,string类型
buttonicon:按钮的图标,string类型,必须为UI theme图标
onClickButton:按钮事件,function类型,默认null
position:first或者last,按钮位置
title:string类型,按钮的提示信息
cursor:string类型,光标类型,默认为pointer
id:string类型,按钮id
如果设置多个按钮:
jQuery("#grid_id") .navGrid('#pager',{edit:false,add:false,del:false,search:false}) .navButtonAdd('#pager',{ caption:"Add", buttonicon:"ui-icon-add", onClickButton: function(){ alert("Adding Row"); }, position:"last" }) .navButtonAdd('#pager',{ caption:"Del", buttonicon:"ui-icon-del", onClickButton: function(){ alert("Deleting Row"); }, position:"last" });
按钮间的分隔
jQuery("#grid_id").navGrid("#pager",...).navButtonAdd("#pager",{parameters}).navSeparatorAdd("#pager",{separator_parameters}};
默认参数:
{sepclass : “ui-separator”,sepcontent: ''}
sepclass:ui-jqgrid的属性名
sepcontent:分隔符的内容.
格式化
jqGrid的格式化是定义在语言包中
$jgrid = { ... formatter : { integer : {thousandsSeparator: " ", defaultValue: '0'}, number : {decimalSeparator:".", thousandsSeparator: " ", decimalPlaces: 2, defaultValue: '0.00'}, currency : {decimalSeparator:".", thousandsSeparator: " ", decimalPlaces: 2, prefix: "", suffix:"", defaultValue: '0.00'}, date : { dayNames: [ "Sun", "Mon", "Tue", "Wed", "Thr", "Fri", "Sat", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ], monthNames: [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ], AmPm : ["am","pm","AM","PM"], S: function (j) {return j < 11 || j > 13 ? ['st', 'nd', 'rd', 'th'][Math.min((j - 1) % 10, 3)] : 'th'}, srcformat: 'Y-m-d', newformat: 'd/m/Y', masks : { ISO8601Long:"Y-m-d H:i:s", ISO8601Short:"Y-m-d", ShortDate: "n/j/Y", LongDate: "l, F d, Y", FullDateTime: "l, F d, Y g:i:s A", MonthDay: "F d", ShortTime: "g:i A", LongTime: "g:i:s A", SortableDateTime: "Y-m-d\\TH:i:s", UniversalSortableDateTime: "Y-m-d H:i:sO", YearMonth: "F, Y" }, reformatAfterEdit : false }, baseLinkUrl: '', showAction: '', target: '', checkbox : {disabled:true}, idName : 'id' } ...
这些设置可以通过colModel中的formatoptions参数修改
jQuery("#grid_id").jqGrid({ ... colModel : [ ... {name:'myname', ... formatter:'number', ...}, ... ], ... });
此实例是对名为“myname”的列进行格式化,格式化类是“number”,假如初始值为“1234.1”则格式化后显示为“1 234.10” 。
如果给某列进行格式化:
jQuery("#grid_id").jqGrid({ ... colModel : [ ... {name:'myname', ... formatter:'currency', formatoptions:{decimalSeparator:",", thousandsSeparator: ",", decimalPlaces: 2, prefix: "$ "} } , ... ], ... });
这个设置会覆盖语言包中的设置。
select类型的格式化实例:
原始数据
jQuery("#grid_id").jqGrid({ ... colModel : [ {name:'myname', edittype:'select', editoptions:{value:"1:One;2:Two"}} ... ], ... });
使用格式化后
jQuery("#grid_id").jqGrid({ ... colModel : [ {name:'myname', edittype:'select', formatter:'select', editoptions:{value:"1:One;2:Two"}} ... ] ... });
结果是,表格的数据值为1或者2但是现实的是One或者Two。
对超链接使用select类型的格式化:
jQuery("#grid_id").jqGrid({ ... colModel: [ {name:'myname', edittype:'select', formatter:'select', formatoptions:{baseLinkUrl:'someurl.php', addParam: '&action=edit'}, ...} ... ] ... });
得到http://localhost/someurl.php?id=123&action=edit
如果想改变id值则
jQuery("#grid_id").jqGrid({ ... colModel: [ {name:'myname', edittype:'select', formatter:'select', formatoptions:{baseLinkUrl:'someurl.php', addParam: '&action=edit', idName:'myid'}, ...} ... ] ... });
得到http://localhost/someurl.php?myid=123&action=edit
自定义格式化
jQuery("#grid_id").jqGrid({ ... colModel: [ ... {name:'price', index:'price', width:60, align:"center", editable: true, formatter:currencyFmatter}, ... ] ... }); function currencyFmatter (cellvalue, options, rowObject) { // do something here return new_format_value }
cellvalue:要被格式化的值
options:对数据进行格式化时的参数设置,格式为:
{ rowId: rid, colModel: cm}
rowObject:行数据
数据的反格式化跟格式化用法相似.
jQuery("#grid_id").jqGrid({ ... colModel: [ ... {name:'price', index:'price', width:60, align:"center", editable: true, formatter:currencyFmatter, unformat:unformatCurrency}, ... ] ... }); function currencyFmatter (cellvalue, options, rowObject) { return "$"+cellvalue; } function unformatCurrency (cellvalue, options) { return cellvalue.replace("$",""); }
表格中数据实际值为123.00,但是显示的是$123.00; 我们使用getRowData ,getCell 方法取得的值是123.00。
创建通用的格式化函数
<script type="text/javascript"> jQuery.extend($.fn.fmatter , { currencyFmatter : function(cellvalue, options, rowdata) { return "$"+cellvalue; } }); jQuery.extend($.fn.fmatter.currencyFmatter , { unformat : function(cellvalue, options) { return cellvalue.replace("$",""); } }); </script>
具体使用:
jQuery("#grid_id").jqGrid({ ... colModel: [ ... {name:'price', index:'price', width:60, align:"center", editable: true, formatter:currencyFmatter}, ... ] ... })
搜索
表格中所有的列都可以作为搜索条件。
所用到的语言包文件
$.jgrid = { ... search : { caption: "Search...", Find: "Find", Reset: "Reset", odata : ['equal', 'not equal', 'less', 'less or equal','greater','greater or equal', 'begins with','does not begin with','is in','is not in','ends with','does not end with','contains','does not contain'], groupOps: [ { op: "AND", text: "all" }, { op: "OR", text: "any" } ], matchText: " match", rulesText: " rules" }
colModel 设置
可选参数 |
类型 |
说明 |
默认值 |
search |
boolean |
是否是搜索列 |
true |
stype |
string |
搜索类型,text类型或者select类型 |
text |
searchoptions |
object |
对搜索条件进行一些设置 |
searchoptions 参数
属性 |
类型 |
说明 |
dataUrl |
string |
只有当搜索类型为select才起效 |
buildSelect |
function |
只有当dataUrl设置时此参数才起效,通过一个function来构建下拉框 |
dataInit |
function |
初始化时调用,用法:dataInit: function(elem) {do something}通常用在日期的选择上. Example:dataInit : function (elem) {$(elem).datepicker();} |
dataEvents |
array |
事件列表,用法:dataEvents: [{ type: 'click', data: { i: 7 }, fn: function(e) { console.log(e.data.i); }},{ type: 'keypress', fn: function(e) { console.log('keypress'); } }] |
attr |
object |
设置属性值。attr : { title: “Some title” } |
searchhidden |
boolean |
默认情况下,隐藏值不是搜索列。为了使隐藏值可以作为搜索列则将此设为true |
sopt |
array |
此参数只用到单列搜索上,说明搜索条件。可用值:['eq','ne','lt','le','gt','ge','bw','bn','in','ni','ew','en','cn','nc']意 思为['equal','not equal', 'less', 'less or equal','greater','greater or equal', 'begins with','does not begin with','is in','is not in','ends with','does not end with','contains','does not contain'] |
defaultValue |
string |
默认值 |
value |
mixed |
只用在搜索类型为select下。可以是string或者object,如果为string则格式为value:label,且以“;”结尾;如果为object格式为editoptions:{value:{1:'One';2:'Two'}} |
jQuery("#grid_id").jqGrid({ ... colModel: [ ... {name:'price', index:'price', width:60, search:true, stype:'text', searchoptions:{dataInit:datePick, attr:{title:'Select Date'}} }, ... ] ... }); datePick = function(elem) { jQuery(elem).datepicker(); }
需要说明的:
所有的搜索都是使用url来到服务器端查询数据。
当执行搜索时会用查询数据填充postData array
发送到服务器端搜索字符串的名称为_search
当点击刷新按钮时不会使用搜索条件
每个搜索方法都有自己的数据清空方法
搜索工具栏
搜索工具栏只是在列标题下面构造一个输入框。且使用表格的url进行搜索记录,发到服务器端数据格式为name:value,而且是附加在postData之后。
jQuery("#grid_id").filterToolbar(options); jQuery("#grid_id").jqGrid('filterToolbar',options);
options:参数
可选参数 |
类型 |
描述 |
默认值 |
autosearch |
boolean |
查询规则,如果是text类型则是当按下回车键才去执行查询;如果是select类型的查询则当值改变时就去执行查询 |
true |
beforeSearch |
function |
执行查询之前触发此事件 |
null |
afterSearch |
function |
查询完成后触发事件 |
null |
beforeClear |
function |
清空查询条件值时触发事件 |
null |
afterClear |
function |
清空查询条件后触发事件 |
null |
方法:
方法 |
描述 |
triggerToolbar |
执行查询时调用此方法 |
clearToolbar |
当清空查询条件值时触发此函数 |
toggleToolbar |
Toggeles工具栏 |
自定义搜索
<div id="mysearch"></div> jQuery("#mysearch").filterGrid('#grid_id',options);
options:参数
参数 |
描述 |
默认值 |
gridModel |
当为ture我们会使用colModel中的属性构造查询条件,所用到的参数:name, index, edittype, editoptions, search.还有一个参数:defval:查询条件的默认值;surl:当edittype:'select'时获取select数据的url,格 式:<select><option value='val1'> Value1 </option><option value='val2'> Value2 </option>…<option value='valn'> ValueN </option></select> |
false |
gridNames |
gridModel为true时起效,设置查询列的名称 |
false |
filterModel |
gridModel为false时起效,格式:{label:'LableFild', name: 'colname', stype: 'select', defval: 'default_value', surl: 'someurl', sopt:{optins for the select}}。label:字段显示名称;name:列名;stype:输入框类型,text或者select;surl:获取select数据的地 址,要求的内容为html格式:<select><option value='val1'> Value1 </option><option value='val2'> Value2 </option>…<option value='valn'> ValueN </option></select>;sopt:同editoptions |
[] |
formtype |
定义表单如何被构造,'horizontal' or 'vertical' |
|
autosearch |
如果为true:当点击回车键触发查询;当select值变化时触发查询 |
|
formclass |
可以使用的css |
filterform |
tableclass |
可以使用到table上的css |
filtertable |
buttonclass |
按钮上使用的css |
filterbutton |
searchButton |
搜索按钮 |
Search |
clearButton |
清空数据的按钮 |
Clear |
enableSearch |
启用禁用搜索按钮 |
false |
enableClear |
启用禁用清空按钮 |
false |
beforeSearch |
搜索之前触发的事件 |
null |
afterSearch |
搜索完成之后触发的事件 |
null |
beforeClear |
清空数据之前触发的事件 |
null |
afterClear |
清空数据之后触发事件 |
null |
url |
搜索数据的url |
‘’ |
marksearched |
当为true时,每次查询之后所有查询的列都标记为可查询列 |
true |