Web jquery表格组件 JQGrid 的使用 - 5.Pager翻页搜索格式化自定义按钮

Posted 海龙的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Web jquery表格组件 JQGrid 的使用 - 5.Pager翻页搜索格式化自定义按钮相关的知识,希望对你有一定的参考价值。

系列索引

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.问题研究

 

JQGrid导出Excel文件

 

目录

翻页

自定义按钮

格式化

自定义格式化

搜索

搜索工具栏

自定义搜索

 

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

 

以上是关于Web jquery表格组件 JQGrid 的使用 - 5.Pager翻页搜索格式化自定义按钮的主要内容,如果未能解决你的问题,请参考以下文章

Web jquery表格组件 JQGrid 的使用 - 6.准备工作 & Hello JQGrid

Web jquery表格组件 JQGrid 的使用 - 7.查询数据编辑数据删除数据

Web jquery表格组件 JQGrid 的使用 - 8.Pager新增数据查询刷新查看数据

Web jquery表格组件 JQGrid 的使用 - 5.Pager翻页搜索格式化自定义按钮

组件表格-jqGrid

组件表格-jqGrid