jqGrid的若干种用法

支持多种类型的数据集合作为数据源

  jqGrid可以绑定三种类型的数据:XML,JSON和数组。使用不同的数据类型主要是设置datatype属性,它的值分别为‘xml‘,‘json‘,‘local‘(数组)

$("#grid1").jqgrid(
........
datatype: "xml",
........
);

  下面则列举各种数据类型的格式

  XML格式: 

<rows>
  <page></page>
  <total></total>
  <records></records>
  <row id="rowid">
    <cell>value1</cell>
    .........
    <cell>valueN</cell>
  </row>
</rows>

  json格式

{"page":"页号","rows":[{name1:‘value1‘,name2:‘value2‘,.....nameN:‘valueN‘},.... {....} ], "total":记录数,"records":总记录数}

  数组格式

var datas=[
{name1:‘value1‘,name2:‘value2‘,..... nameN:‘valueN‘},
....
{....}
];

//把数据添加到jqgrid里
for (var i = 0; i <= mydata.length; i++) {
    jQuery("#grid1").jqGrid(‘addRowData‘, i + 1, mydata[i]);
}

或者设置data属性

$("#grid1").jqgrid(
......
       data:mydata,    datatype:‘local‘,
.......
);

统计运算的功能

  将footerrow设为true,绑定gridComplete事件。

$("#grid1").jqgrid(......
        footerrow: true,
        gridComplete: completeMethod,
.......);

    function completeMethod()
    {
        var sum_amount=$("#grid1").getCol(‘amount‘,false,‘sum‘);
        var sum_tax=$("#grid1").getCol(‘tax‘,false,‘sum‘);
        var sum_total=$("#grid1").getCol(‘total‘,false,‘sum‘);
        $("#grid1").footerData(‘set‘, { name: ‘合计:‘, amount: sum_amount, tax: sum_tax, total: sum_total });
   }

  统计时利用getCol方法,第一个参数为colMode的name值,第二个设为false,否则会返回一个数组而不是但一个数据,第三个是设置统计方式,有‘sum‘,‘avg‘和‘count‘。

排序

  只要单击列的标题,就可以对该列进行升序或降序的排序。设置该列是否允许排序,在列的属性里设置sortable,同时对于不同的数据类型,也需要设置其相应的排序类型sorttype,类型有int/integer 整型,float/number/currency 浮点型,date 日期,text  文本,function 定义函数来实现自定的排序规则。


$("#grid1").jqgrid(
........
colModel: [
.........
       { name: ‘id‘, index: ‘id‘, width: 60, myexport: true, editable: true , sorttype: "int", sortable: true},
.............
],
........);

 

分组

最简单的分组

还有复杂一点的排序,那还是上jqGrid Demos看看吧!

筛选

  jqGrid的筛选并不是在grid里面的内容进行筛选,其实是对数据库里的数据筛选查询。

  html:

<table id="s2list"></table>
 <div id="s2pager"></div>

  javascript:

 jQuery("#s3list").jqGrid(‘navGrid‘,‘#s3pager‘,{edit:false,add:false,del:false,search:false,refresh:false}); jQuery("#s3list").jqGrid(‘navButtonAdd‘,"#s3pager",{caption:"Toggle",title:"Toggle Search Toolbar", buttonicon :‘ui-icon-pin-s‘,     onClickButton:function(){       mygrid[0].toggleToolbar()   }});jQuery("#s3list").jqGrid(‘navButtonAdd‘,"#s3pager",{caption:"Clear",title:"Clear Search",buttonicon :‘ui-icon-refresh‘,     onClickButton:function(){       mygrid[0].clearToolbar()   }}); jQuery("#s3list").jqGrid(‘filterToolbar‘);

增删改查工具栏及分页栏
  jqGrid附带了分页栏,在分页栏上可以添加增加,修改,删除以及查询按钮。

  在html多添加一个层,这个层就存放分页栏:

<div id="pager"></div>

$("#grid1").jqgrid(
......
        pager:"#pager",     //通过这属性还可以设置可选的页面大小     rowList: [10, 20, 30],
.......
);//这里的 edit,add等就是对应编辑新增等按钮,通过设置布尔值来决定是否显示
jQuery("#grid1").jqGrid(‘navGrid‘, ‘#pager‘, { edit: true, add: true, del: true, search: true, refresh: true});//或者用这种形式

  jQuery("#grid1").jqGrid(‘navGrid‘, ‘#pager‘,
    {}, //options
    {height: 280, reloadAfterSubmit: false }, // edit options
    {height: 280, reloadAfterSubmit: false }, // add options
    {reloadAfterSubmit: false }, // del options
    {} // search options
  );

 

记得要在colModel里给可供编辑的列的editable赋值为true,才可以编辑。

 

分页读取数据

  既然上面已提及到分页,下面则介绍另一种分页方式,通过滚动条进行翻页。在这种分页方式中,数据库的所有数据并非一下子读取出来填充到grid中,而是通过滚动条的位置得出当前浏览到的哪一页数据,才从数据库读取那部分的数据。

$("#grid1").jqgrid(
......
        //设置了这个才会根据滚动分页读取数据
        scroll: 1,
    //设置页面的大小
    rowNum: 10,
.......
);

下面的例子只是用到本地的数据,同样也是实现了滚动翻页的效果

滚动条翻页

父子表

  通过以下设置可使用子表

$("#grid1").jqgrid(
......
     //启用子表
        subGrid : true,
    subGridUrl: ‘............‘,
    //设置子表的属性
    subGridModel: [{
                  name  : [‘name1‘,‘name2‘,......,‘nameN‘],
                   width : [width1,width2,.....,widthN] } ],
.......
);        

这里子表的设置只是最基本的,更多属性的资料可参阅 http://www.trirand.com/jqgridwiki/doku.php?id=wiki:subgrid

Get/Set 单元格的值

  获取某个单元格的值就调用getCell(rowid, iCol) 。iCol既可以是当前列在colModel中的位置索引也可以是name值。注意:在编辑行或者单元格时不能使用此方法,此时返回的并不是改变的值,而是原始值。

  设置某个单元格的值就调用setCell(rowid,colname, data, class, properties)。rowid:当前行id;colname:列名称,也可以是列的位置索引,从0开始;data:改变单元格的内容,如果为空则不更 新;class:如果是string则会使用addClass方法将其加入到单元格的css中,如果是array则会直接加到style属性中;properties:设置单元格属性colModel。

  当然也可以Get/Set 行或者列,在这里可查阅更多get/set/add的方法http://www.trirand.com/jqgridwiki/doku.php?id=wiki:methods

数据验证

  通过设置colModel的editrules属性,可以对输入的数据进行验证

jQuery("#grid_id").jqGrid({
...
   colModel: [
      ...
      {name:‘price‘, ..., editrules:{edithidden:true, required:true....}, editable:true },
      ...
   ]
...
});

下面则是可用的验证选项

选项 类型 描述
edithidden boolean
这个选项只适用于表单编辑模块。默认情况下隐藏的字段是不可编辑的。如果该字段隐藏在grid中并且edithidden设置为true,当调用增加或编辑方法时该字段就可以编辑。

required boolean (true或false)如果设置为true,该值将被检查,如果为空,错误信息将被显示。
number boolean (true或false)如果设置为true,该值将被检查,如果这不是一个数字,一个错误信息将被显示。
integer boolean (true或false)如果设置为true,该值将被检查,如果这不是一个整数,错误信息将被显示。
minValue number(integer) 如果设置了值,单元格的值将被检查,如果单元格的值小于这个值,就会显示错误信息。
maxValue number(integer) 如果设置了值,单元格的值将被检查,如果单元格的值大于这个值,就会显示错误信息。
email boolean 如果设置为true,则该值将被检查,如果这是无效的电子邮箱地址,将显示一条错误消息。
url boolean 如果设置为true,则该值将被检查,如果这不是有效的URL,将显示一条错误消息。
date boolean 如果设置为true,则该值将被检查,如果不是有效的日期,将显示一条错误消息。
time boolean 如果设置为true,则该值将被检查,如果这不是有效的时间,错误信息将被显示。目前只支持hh:mm格式和可选的AM / PM结束时
custom boolean 如果设置为true,允许通过自定义功能自定义检查规则的定义。
custom_func function
当custom设置为true时,function一定要使用。传递到此函数的参数是value,该值一定要被检查和命名。该函数一定要返回由以下参数组成的数组:1,true/false。2,返回给用户的错误信息。例如[false,"请输入正确的数据"]。

设置条带状的列

jQuery("#ghcs").jqGrid(‘setGroupHeaders‘, { //设置列头是否启用colSpan效果
  useColSpanStyle: false,
  groupHeaders:[
    {      startColumnName: ‘colName‘,   //合并列组的第一个列名
    numberOfColumns: number,  //合并列的数量    titleText: ‘title‘ //合并列的标题   },    ........
  ]
}

编辑器

  jqGrid的模板列自带了一些很基本的编辑器,包括:‘text‘单行文本框, ‘textarea‘多行文本框, ‘select‘下拉框, ‘checkbox‘复选框, ‘password‘密码框, ‘button‘按钮, ‘image‘图片按钮, ‘file‘文件上传框 以及‘custom‘自定义编辑器。

在colModel里设置edittype则可

jQuery("#grid_id").jqGrid({
...
   colModel: [
      ...
      {name:‘price‘, ..., editable:true, edittype:‘text‘,editoptions: {size:10, maxlength: 15}....},     ...   ]   ... });

其中editoption是对编辑器的一些设置,文本框就可以设置size,maxlength等;复选框可设置value ;

ditoptions: { value:"Yes:No" }

下拉框以这种形式

editoptions: { value: “val1:text1; val2:text2; val3:text3” }

更多资料参阅http://www.trirand.com/jqgridwiki/doku.php?id=wiki:common_rules#edittype

模板列调用其他编辑器

上面介绍的编辑器只是使用了html的表单元素而已,下面介绍的是调用插件。

<script src="js/My97DatePicker/WdatePicker.js" type="text/javascript"></script>

<script type="text/javascript">

        function InitDatePicker(cl) {
            $(cl).click(function () {
                WdatePicker();
            });
        }
        ....

        jQuery("#grid_id").jqGrid({
    ...
       colModel: [
              ...
              {name:‘date‘, ..., editable:true, edittype:‘text‘,editoptions: {dataInit:InitDatePicker}....},
         ...
          ] ,
      ...
    });

    .......

</script>

这里调用了My97DatePicker插件作为日历编辑器。

如果想在一个模板列里放置多种控件,可以用一下方式

 jQuery("#grid_id").jqGrid({
    ...
      afterInsertRow: function (rowid, aData) {
         var  controls=" ";  //放置在模板里的控件
         .......
        $("#grid_id").jqGrid(‘setCell‘, rowid, ‘tag‘, controls);
    }
      ...
    });

这个其实是在grid的单元格内通过编辑其html来实现。

模仿Excel移动选择单元格

  设置单元格编辑模式后,可以通过上下左右的导航键跳到需要编辑的单元格,按回车进入编辑状态,按Esc键不保存更改内容,按回车保存更改内容

jQuery("#grid_id").jqGrid({
    ...
    cellEdit:true,
     cellsubmit:‘clientArray‘,  //定义了单元格内容保存位置 默认值是‘remote‘
      ...
    });

时间: 2024-07-29 01:35:38

jqGrid的若干种用法的相关文章

XtraGrid的若干种用法 z

支持多种类型的数据集合作为数据源 XtraGrid与传统的DataGridView一样,支持多种类型作为其数据源.下面例子是将DataTable, List<T>和数组分别绑定到XtraGrid里面. //定义数据源 List<Person> peopleList=new List<Person> { { ID = 1, FirstName = "Magnus", LastName = "Hedlund", Sex = true,

Java 计算中英文长度的若干种方法

在项目开发中经常碰到到输入字符的校验,特别是中英文混合在一起的校验.而为了满足校验的需求,有时需要计算出中英文的长度. 本文将通过几种常用的方法实现长度的计算: <span style="font-size:18px;">import java.io.UnsupportedEncodingException; /** * 中英文校验的处理 * @author a123demi * */ public class EnChValidate { public static vo

Linux内核中等待队列的几种用法

Linux内核里的等待队列机制在做驱动开发时用的非常多,多用来实现阻塞式访问,下面简单总结了等待队列的四种用法,希望对读者有所帮助. 1. 睡眠等待某个条件发生(条件为假时睡眠): 睡眠方式:wait_event, wait_event_interruptible 唤醒方式:wake_up (唤醒时要检测条件是否为真,如果还为假则继续睡眠,唤醒前一定要把条件变为真) 2. 手工休眠方式一: 1)建立并初始化一个等待队列项 DEFINE_WAIT(my_wait) <==> wait_queue

[java]static关键字的四种用法

在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构.下面我们先来了解一下static关键字及其用法. static关键字 1.修饰成员变量 在我们平时的使用当中,static最常用的功能就是修饰类的属性和方法,让他们成为类的成员属性和方法,我们通常将用static修饰的成员称为类成员或者静态成员,这句话挺起来都点奇怪,其实这是相对于对象的属性和方法来说的.请看下面的例子:(未避

JSP中的include的两种用法

1.两种用法 <@inlcude file ="header.jsp"/> 此时引入的是静态的jsp文件,它将引入的jsp中的源代码原封不动地附加到当前文件中,所以在jsp程序中使用这个指令的时候file里面的值(即要导入的文件)不能带多余的标签或是与当前jsp文件重复的东西.例如里面不要包含<html><body>这样的标签,因为是把源代码原封不动的附加过来,所以会与当前的jsp中的这样的标签重复导致出错. <jsp:include page

Android---24---Spinner的两种用法

Spinner是一个列表选择框,它有两种用法: 一种是使用android:entries属性的,一种是不使用该属性,通过动态的添加Adapter来实现的. 第一种: MainActivity.java: import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import andr

js中继承的几种用法总结(apply,call,prototype)

本篇文章主要介绍了js中继承的几种用法总结(apply,call,prototype) 需要的朋友可以过来参考下,希望对大家有所帮助 一,js中对象继承 js中有三种继承方式 1.js原型(prototype)实现继承 <SPAN style="<SPAN style="FONT-SIZE: 18px"><html>   <body>  <script type="text/javascript"> 

指针与引用的区别以及引用的三种用法

1.指针与引用的区别: 指针是一块内存的地址值,而引用是一块内存的别名. 下面引自:http://www.cnblogs.com/kingln/articles/1129114.html 从概念上讲.指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变. 而引用是一个别名,它在逻辑上不是独立的,它的存在具有依附性,所以引用必须在一开始就被初始化,而且其引用的对象在其整个生命周期中是不能被改变的(自始至终只能依附于同一

poj 1511 Dijkstra的另一种用法---求其他点到源点的最短路

传送门:http://poj.org/problem?id=1511 题目其实到现在我都没读懂,到底是哪里看出来的,ans是源点到各个点最短路的和外加各个点到源点的最短路的和,不过重要的是学到dijkstra的另一种用法--求各个点到源点的距离,原理不难理解,就是把dijkstra求单源最短路径的过程逆过来: 1.取源点加入S集合,设其余点在T集合 2.找到达源点的最小边,将该边连的点加入S,更新T到S的各个点的最短路径,取最短的边,继续2的过程 而dijastra求单源最短路径的过程 1.取源