easyui datagrid 的数据加载
2012-09-04 21:19
344 查看
转载自:
http://www.easyui.info/archives/204.html
这篇文章只谈jQueryeasyuidatagrid的数据加载,因为这也是大家谈论最多的内容。其实easyuidatagrid加载数据只有两种方式:一种是ajax加载目标url返回的json数据;另一种是加载js对象,也就是使用loadDate方法。
这里就自己的使用经验,对两种方式做简单总结和归纳,并且对使用过程中容易产生的误区做较为详细的描述,希望能对大家有所帮助。
调用方式:
目前可能大多数人都是选择这种方式,因为跟流行的框架结合的也比较好,使用url的话,可以将url写在DOM里面或者申明datagrid对象的url属性,以下两种方式都是可以的:
相关方法:
load方法在datagrid的api文档里面写得很清楚了,该方法是加载第一页数据的,在具体的应用中,这个方法主要用于刷新数据。
因为url方式网上的资料特别多,我这里就简述这么多,下面重点讨论一下loadDate方式加载数据。
首先要明白“加载本地数据”是个什么概念,这里指的是加载javascript对象数据,而javascript数据对象显然可以使是通过其它异步方式获得的,所以这个“加载本地数据”的描述并不准确。
调用方式:
先要将url属性设置为null,或者不设置,然后使用datagrid的loadDate方法加载js数据对象,这个对象包含两个属性,一个是记录总数,一个是当前页码的对象数组。例如:
如何分页:
不对源码做任何改动的话,可以首先获取datagrid的Pagination对象,然后通过写Pagination对象的onSelectPage事件来实现分页:
上面的代码应该很容易看懂了,做出来的分页基本也算正常,不过有一个缺憾,那就是当显示行号的时候,第一页数据是从1-20的话,第二页数据的行号还会保持1-20,同时这些编码似乎也不怎么便捷。
之前我写过jQueryeasyuidatagrid非URL后台分页的文章,稍微对easyuidatagrid做下扩展,增加一个doPagination事件,那么编码就较为简单了,而且行号不正确的问题也就顺便解决了。
这种方式就不用再去获取Pagination对象了,编码变得简易了,同时还解决了页码显示不正确的问题。
加载中效果:
easyuidatagrid只有在使用url方式获取数据的时候才会显示“加载中……”的遮罩效果,使用loadDate方法加载数据的话,其实也可以用上这效果,只不过稍微麻烦些:
当然了,你也可以利用datagrid的onLoadSuccess事件来实现,反正最终都是调用datagrid的loding和loaded方法完成等待DIV的显示和隐藏的:
如何不统计总数:
有时候数据层的数据量特别大,查询统计总数的话会很耗时,统计总数就显得不怎么合适了,如何不统计总数完全看你后台怎么写了,可以虚拟一个一个总数,这个数字总是比当前页码大1就行了,具体实现就不在本篇文章关注的范围内了。
这篇文章只谈jQueryeasyuidatagrid的数据加载,因为这也是大家谈论最多的内容。其实easyuidatagrid加载数据只有两种方式:一种是ajax加载目标url返回的json数据;另一种是加载js对象,也就是使用loadDate方法。
这里就自己的使用经验,对两种方式做简单总结和归纳,并且对使用过程中容易产生的误区做较为详细的描述,希望能对大家有所帮助。
url方式加载数据:
调用方式:
目前可能大多数人都是选择这种方式,因为跟流行的框架结合的也比较好,使用url的话,可以将url写在DOM里面或者申明datagrid对象的url属性,以下两种方式都是可以的:
1 | < table id = "tt" style = "width:700px;height:auto" title = "DataGrid" idField = "itemid" url = "datagrid_data2.json" > |
1 | $( '#test' ).datagrid({ |
2 | url: 'datagrid_data2.json' |
3 | }); |
相关方法:
load | param | 加载第一页数据,param将代替默认查询参数,注意的是该方法只适用于url方式. |
因为url方式网上的资料特别多,我这里就简述这么多,下面重点讨论一下loadDate方式加载数据。
加载本地数据方式:
首先要明白“加载本地数据”是个什么概念,这里指的是加载javascript对象数据,而javascript数据对象显然可以使是通过其它异步方式获得的,所以这个“加载本地数据”的描述并不准确。调用方式:
先要将url属性设置为null,或者不设置,然后使用datagrid的loadDate方法加载js数据对象,这个对象包含两个属性,一个是记录总数,一个是当前页码的对象数组。例如:
1 | var obj ={ 'total' :100, 'rows' :[{id: '1' ,name: '一' },{id: '2' ,name: '二' }]}; |
2 | $( '#tt' ).datagrid( 'loadData' ,obj); |
如何分页:
不对源码做任何改动的话,可以首先获取datagrid的Pagination对象,然后通过写Pagination对象的onSelectPage事件来实现分页:
1 | //定义全局变量记录分页信息 |
2 | var oPage ={ |
3 | pageIndex:1, |
4 | pageSize:20 |
5 | }; |
6 | //初始化dategrid |
7 | $( '#tt' ).datagrid({ |
8 | url: null , |
9 | pagination: true , |
10 | pageSize:20, |
11 | pageNumber:1, |
12 | rownumbers: true |
13 | }); |
14 | $( '#tt' ).datagrid( 'getPager' ).pagination({ |
15 | displayMsg: '当前显示从 [{from}]到[{to}]共[{total}]条记录' , |
16 | onSelectPage : function (pPageIndex, pPageSize){ |
17 | //改变oPage的参数值,用于下次查询传给数据层查询指定页码的数据 |
18 | oPage.pageIndex =pPageIndex; |
19 | oPage.pageSize =pPageSize; |
20 | //定义查询条件 |
21 | var queryCondition ={name: "世纪之光" }; |
22 | //异步获取数据到javascript对象,入参为查询条件和页码信息 |
23 | var oData =getAjaxDate( "orderManageBuz" , "qryWorkOrderPaged" ,queryCondition,oPage); |
24 | //使用loadDate方法加载Dao层返回的数据 |
25 | $( '#tt' ).datagrid( 'loadData' ,{ "total" :oData.page.recordCount, "rows" :oData.data}); |
26 | } |
27 | }); |
之前我写过
1 | //定义全局变量记录分页信息 |
2 | var oPage ={ |
3 | pageIndex:1, |
4 | pageSize:20 |
5 | }; |
6 | //初始化dategrid |
7 | $( '#tt' ).datagrid({ |
8 | url: null , |
9 | pagination: true , |
10 | pageSize:20, |
11 | pageNumber:1, |
12 | rownumbers: true , |
13 | doPagination: function (pPageIndex, pPageSize){ |
14 | //改变oPage的参数值,用于下次查询传给数据层查询指定页码的数据 |
15 | oPage.pageIndex =pPageIndex; |
16 | oPage.pageSize =pPageSize; |
17 | //定义查询条件 |
18 | var queryCondition ={name: "世纪之光" }; |
19 | //异步获取数据到javascript对象,入参为查询条件和页码信息 |
20 | var oData =getAjaxDate( "orderManageBuz" , "qryWorkOrderPaged" ,queryCondition,oPage); |
21 | //使用loadDate方法加载Dao层返回的数据 |
22 | $( '#tt' ).datagrid( 'loadData' ,{ "total" :oData.page.recordCount, "rows" :oData.data}); |
23 | }, |
24 | }); |
加载中效果:
easyuidatagrid只有在使用url方式获取数据的时候才会显示“加载中……”的遮罩效果,使用loadDate方法加载数据的话,其实也可以用上这效果,只不过稍微麻烦些:
1 | //定义全局变量记录分页信息 |
2 | var oPage ={ |
3 | pageIndex:1, |
4 | pageSize:20 |
5 | }; |
6 | //初始化dategrid |
7 | $( '#tt' ).datagrid({ |
8 | url: null , |
9 | pagination: true , |
10 | pageSize:20, |
11 | pageNumber:1, |
12 | rownumbers: true , |
13 | doPagination: function (pPageIndex, pPageSize){ |
14 | //改变oPage的参数值,用于下次查询传给数据层查询指定页码的数据 |
15 | oPage.pageIndex =pPageIndex; |
16 | oPage.pageSize =pPageSize; |
17 | Exec_Wait( 'tt' , 'loadDateGrid()' ); |
18 | }, |
19 | }); |
20 | function loadDateGrid(){ |
21 | //定义查询条件 |
22 | var queryCondition ={name: "世纪之光" }; |
23 | //异步获取数据到javascript对象,入参为查询条件和页码信息 |
24 | var oData =getAjaxDate( "orderManageBuz" , "qryWorkOrderPaged" ,queryCondition,oPage); |
25 | //使用loadDate方法加载Dao层返回的数据 |
26 | $( '#tt' ).datagrid( 'loadData' ,{ "total" :oData.page.recordCount, "rows" :oData.data}); |
27 | } |
28 |
29 | /** |
30 | * 封装一个公用的方法 |
31 | * |
32 | * |
33 | * |
34 | */ |
35 | function Exec_Wait(grid,func,time){ |
36 | var dalayTime |
37 | __func_=func; |
38 | __selector_ '#' + grid; |
39 | $(__selector_).datagrid( "loading" ); |
40 | if (time) { |
41 | dalayTime |
42 | } |
43 | gTimeout=window.setTimeout(_Exec_Wait_,dalayTime); |
44 | } |
45 | function _Exec_Wait_(){ |
46 | try {eval(__func_); |
47 | } catch (e){ |
48 | alert( "__func_:" + ";_ExecWait_" + e.message); |
49 | }finally{ |
50 | window.clearTimeout(gTimeout); |
51 | $(__selector_).datagrid( "loaded" ); |
52 | } |
53 | } |
1 | function loadDateGrid(){ |
2 | $( '#tt' ).datagrid( 'loading' ); //打开等待div |
3 | var queryCondition |
4 | name: "世纪之光" |
5 | }; |
6 | var oData =getAjaxDate( "orderManageBuz" , "qryWorkOrderPaged" , |
7 | $( '#tt' ).datagrid( 'loadData' , { |
8 | "total" : oData.page.recordCount, |
9 | "rows" : oData.data |
10 | }); |
11 | } |
12 |
13 | $( '#tt' ).datagrid({ |
14 | onLoadSuccess: function (){ |
15 | //加载完数据关闭等待的div |
16 | $( '#tt' ).datagrid( 'loaded' ); |
17 | } |
18 | }); |
如何不统计总数:
有时候数据层的数据量特别大,查询统计总数的话会很耗时,统计总数就显得不怎么合适了,如何不统计总数完全看你后台怎么写了,可以虚拟一个一个总数,这个数字总是比当前页码大1就行了,具体实现就不在本篇文章关注的范围内了。
相关文章推荐
- [转载]再次谈谈easyui datagrid 的数据加载
- EasyUi datagrid重新加载数据
- easyui datagrid 大数据加载效率慢,优化解决方法
- 再次谈谈easyui datagrid 的数据加载
- easyui datagrid 异步加载数据时滚动条有时会自动滚到最底部的问题
- 解决easyui datagrid加载数据时,checkbox列没有根据checkbox的值来确定是否选中
- 再次谈谈easyui datagrid 的数据加载
- EasyUI datagrid动态加载json数据
- easyui datagrid 大数据加载效率慢,优化解决方法
- EasyUI_datagrid实现动态加载列并为其绑定数据
- EasyUI DataGrid使用Json加载不了数据
- easyui中datagrid用法,加载table数据与标题
- easyui dataGrid加载数据请求参数是表单的内容
- 【项目实战】---为EasyUI DataGrid的某一动态加载数据列添加超链接,点击超链接触发Onclick方法
- easyui加载datagrid和treegrid的几种json数据格式
- 使用easyui在ie浏览器下,treegrid,datagrid加载数据很慢,ie浏览器卡住原因
- 再次谈谈easyui datagrid 的数据加载
- easyui combobox 在datagrid中动态加载数据
- 再次谈谈easyui datagrid 的数据加载
- 解决easyui datagrid加载数据时,checkbox列没有根据checkbox的值来确定是否选中