`

[转]jquery easyui datagrid 加载成功,选中某一行

阅读更多
1.首先你需要设置datagrid的onLoadSuccess
$('#dg').datagrid({onLoadSuccess : function(data){
    $('#dg').datagrid('selectRow',3);
}});
 
2.onLoadSuccess如果是通过 data-options的方式设置的没问题,如果通过js脚本设置的话,
需要保证在loadData之前绑定这个事件函数,类似下面这样
$('#dg').datagrid({"onLoadSuccess":function(data){
    $(this).datagrid('selectRow',3);
}}).datagrid("loadData",XXXXX);
否则在加载数据之后,可能不会去执行onLoadSuccess里面的代码;
 
3.reload方法重新加载当前页面数据
$('#dg').datagrid("reload");

 

再次谈谈easyui datagrid 的数据加载

这篇文章只谈jQuery easyui datagrid 的数据加载,因为这也是大家谈论最多的内容。其实easyui datagrid加载数据只有两种方式:一种是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方式.
reload param 刷新当前页数据,与load方法不同的时候reload方法刷新当前页数据,而load方法会跳到第一页然后刷新.
options null 获取datagrid实例的各项参数值,常用的参数有url,pageNumber,pageSize这三个参数在请求数据以及分页功能中起重要作用.
二次加载问题

对于使用url方式的初学者,经常碰到重复请求的问题,这个问题的根源是多次渲染组件,如何避免二次加载这样问题呢,个人觉得注意以下两点基本就可以防止二次加载了。

  • 使用load和reload函数去动态加载数据,而不是选择再次渲染组件。很多人再次渲染组件的目的仅仅是为了设置url,这得不偿失,url的设置可以通过options方法获取到组件实例的opts,然后在给opts.url重新赋值即可;
  • class方式注册组件和javascript注册方式不要同时使用。class注册方式一般是为了初始化属性,javascript方式则属性和事件都可初始化,但是不管是class方式还是javascipt方式注册组件,每次注册,只要被设置过url属性就会做请求。所以在不可避免要使用javascript方式注册的情况下,索性就不要使用class方式注册了。

因为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. //初始化dategrid   
  2. $('#tt').datagrid({   
  3.     url:null,   
  4.     pagination:true,   
  5.     pageSize:20,   
  6.     pageNumber:1,   
  7.     rownumbers:true  
  8. });   
  9. $('#tt').datagrid('getPager').pagination({   
  10.     displayMsg:'当前显示从 [{from}] 到 [{to}] 共[{total}]条记录',   
  11.     onSelectPage : function(pPageIndex, pPageSize) {   
  12.         //改变opts.pageNumber和opts.pageSize的参数值,用于下次查询传给数据层查询指定页码的数据   
  13.         var gridOpts = $('#tt').datagrid('options');   
  14.         gridOpts.pageNumber = pPageIndex;   
  15.         gridOpts.pageSize = pPageSize;     
  16.         //定义查询条件   
  17.         var queryCondition = {name:"世纪之光"};   
  18.         //异步获取数据到javascript对象,入参为查询条件和页码信息   
  19.         var oData = getAjaxDate("orderManageBuz","qryWorkOrderPaged",queryCondition,gridOpts);   
  20.         //使用loadDate方法加载Dao层返回的数据   
  21.         $('#tt').datagrid('loadData',{"total" : oData.page.recordCount,"rows" : oData.data});   
  22.     }   
  23. });  

上面的代码应该很容易看懂了,做出来的分页基本也算正常,唯一的缺憾就是写起来不怎么便捷。那么如何才能便捷地实现分页呢?

之前我写过jQuery easyui datagrid 非URL后台分页的文章,稍微对easyui datagrid做下扩展,增加一个doPagination事件,那么编码就较为简单了。

 
  1. //初始化dategrid   
  2. $('#tt').datagrid({   
  3.     url:null,   
  4.     pagination:true,   
  5.     pageSize:20,   
  6.     pageNumber:1,   
  7.     rownumbers:true,   
  8.     doPagination:function(pPageIndex, pPageSize) {    
  9.         var gridOpts = $('#tt').datagrid('options');   
  10.         //定义查询条件   
  11.         var queryCondition = {name:"世纪之光"};   
  12.         //异步获取数据到javascript对象,入参为查询条件和页码信息   
  13.         var oData = getAjaxDate("orderManageBuz","qryWorkOrderPaged",queryCondition,{pageNumber:gridOpts.pageNumber,pageSize:gridOpts.pageSize});   
  14.         //使用loadDate方法加载Dao层返回的数据   
  15.         $('#tt').datagrid('loadData',{"total" : oData.page.recordCount,"rows" : oData.data});   
  16.     },   
  17. });  

这种方式就不用再去获取Pagination对象了,而且也不用设置opts的pageNumber和pageSize这两个属性了,编码变得简易了,是不是变得清爽了很多呢?

加载中效果

easyui datagrid只有在使用url方式获取数据的时候才会显示“加载中……”的遮罩效果,使用loadDate方法加载数据的话,其实也可以用上这效果,只不过稍微麻烦些:

 
  1. //初始化dategrid   
  2. $('#tt').datagrid({   
  3.     url:null,   
  4.     pagination:true,   
  5.     pageSize:20,   
  6.     pageNumber:1,   
  7.     rownumbers:true,   
  8.     doPagination:function(pPageIndex, pPageSize) {   
  9.         //改变opts.pageNumber和opts.pageSize的参数值,用于下次查询传给数据层查询指定页码的数据   
  10.         var gridOpts = $('#tt').datagrid('options');   
  11.         gridOpts.pageNumber = pPageIndex;   
  12.         gridOpts.pageSize = pPageSize;     
  13.         Exec_Wait('tt','loadDateGrid()');   
  14.     },   
  15. });   
  16. function loadDateGrid(){   
  17.     var gridOpts = $('#tt').datagrid('options');   
  18.     //定义查询条件   
  19.     var queryCondition = {name:"世纪之光"};   
  20.     //异步获取数据到javascript对象,入参为查询条件和页码信息   
  21.     var oData = getAjaxDate("orderManageBuz","qryWorkOrderPaged",queryCondition,gridOpts);   
  22.     //使用loadDate方法加载Dao层返回的数据   
  23.     $('#tt').datagrid('loadData',{"total" : oData.page.recordCount,"rows" : oData.data});   
  24. }   
  25.   
  26. /**
  27.  * 封装一个公用的方法  
  28.  * @param {Object} grid table的id  
  29.  * @param {Object} func 获取异步数据的方法  
  30.  * @param {Object} time 延时执行时间  
  31.  */  
  32. function Exec_Wait(grid,func,time){   
  33.     var dalayTime = 500;   
  34.     __func_=func;   
  35.     __selector_ = '#' + grid;   
  36.     $(__selector_).datagrid("loading");   
  37.     if (time) {   
  38.         dalayTime = time;   
  39.     }   
  40.     gTimeout=window.setTimeout(_Exec_Wait_,dalayTime);   
  41. }   
  42. function _Exec_Wait_(){   
  43.     try{eval(__func_);   
  44.     }catch(e){   
  45.         alert("__func_:" + __func_ + ";_ExecWait_" + e.message);   
  46.     }finally{   
  47.         window.clearTimeout(gTimeout);   
  48.         $(__selector_).datagrid("loaded");   
  49.     }   
  50. }  

当然了,你也可以利用datagrid的onLoadSuccess事件来实现,反正最终都是调用datagrid的loding和loaded方法完成等待DIV的显示和隐藏的:

 
  1. function loadDateGrid(){   
  2.     $('#tt').datagrid('loading');//打开等待div   
  3.     var queryCondition = {   
  4.         name: "世纪之光"  
  5.     };   
  6.     var oData = getAjaxDate("orderManageBuz""qryWorkOrderPaged", queryCondition, oPage);   
  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就行了,具体实现就不在本篇文章关注的范围内了。

到这里,loadData方式加载grid数据就已经算是完美了,至少该有的问题均已经解决了,希望大家有更好建议一起交流……

 

分享到:
评论

相关推荐

    jQuery EasyUI编辑DataGrid用combobox实现多级联动

    - 在`aa1`列的`onSelect`事件中,获取当前选中的行和行号,然后找到对应的第二级combobox,清除原有数据并重新加载数据,这里的`url`会根据第一级选中的值动态改变。 - 同样的逻辑也应用在`bb1`列的`onSelect`事件...

    jQuery EasyUI datagrid在翻页以后仍能记录被选中行的实现代码

    2. `onLoadSuccess`: 当数据加载成功后,我们遍历`idsArray`,根据商品ID找到新的数据页中的对应行,并通过`datagrid('selectRow', index)`选中这些行。 3. `onUncheck`: 当用户取消选中某行时,我们需要从`idsArray...

    JQuery EasyUI学习教程之datagrid 添加、修改、删除操作

    例如,可以在第一行插入新行,代码为`$("#dg").datagrid('insertRow',{index:0,row:{...}});`。 4. 调用`datagrid('beginEdit', index)`方法开始编辑新添加的行。 5. 在添加行时,应传递一个对象到新行,对象属性...

    jquery easyui DataGrid简单示例

    总体而言,这篇文章通过示例和代码,详细介绍了jQuery EasyUI DataGrid插件的基本操作和一些高级功能,为开发者提供了一个上手的指南,使其能够更高效地在Web应用中集成功能丰富的表格操作功能。

    JQueryEasyUI datagrid框架的基本使用

    JQueryEasyUI datagrid框架是基于jQuery的UI库,提供了一种便捷的方式来实现基于Web的数据展示和交互功能。该框架尤其适合于需要以表格形式展现数据,且需要进行复杂操作(如分页、排序等)的场景。JQueryEasyUI ...

    easyUidataGrid

    `datagrid`提供了一系列的API方法,如`reload`(重新加载数据)、`getSelections`(获取选中的行数据)等,这些方法可以方便地在JavaScript中调用,实现动态交互。 总结,`easyUidataGrid`实例展示了如何使用`...

    JQueryEasyUI学习笔记(十)源码

    jQuery EasyUI的datagrid组件支持双击行打开编辑表单。双击事件可以通过`onDblClickRow`来监听,然后弹出或更新一个对话框进行编辑。源码中会包含对`dialog`和`form`组件的使用,例如: ```javascript $('#datagrid...

    jQuery插件EasyUI设置datagrid的checkbox为禁用状态的方法

    jQuery插件EasyUI是一个基于jQuery的用户界面插件,它提供了一组用户界面组件和工具,用于快速开发Web应用。EasyUI的一个重要组件是datagrid,它是一个数据表格控件,可以显示多行多列的数据,并允许对这些数据进行...

    jquery easyui 通讯录Demo

    在jQuery EasyUI的datagrid中,通过`data`属性指定JSON数据的URL,或者直接赋值为JSON对象,即可实现数据的加载和展示。 此外,jQuery EasyUI还提供了丰富的API和事件处理机制,使得开发者可以对datagrid进行更细致...

    easyui下datagrid嵌套显示相关文件

    在这个文件中,我们可以看到如何设置datagrid来展示主数据,并且如何通过点击某一行触发获取并显示子数据的事件。通常,这会涉及到对`rowspan`属性的使用,以便在特定行下预留空间以显示嵌套的datagrid。同时,可能...

    EasyUI DataGrid 增删改查源码

    删除数据则是选中一行后执行删除操作;修改数据是在选定单元格内编辑,并在保存时更新后台数据;查询数据则允许用户通过输入条件来筛选显示的数据。 在EasyUI DataGrid的源码中,我们会发现这些操作对应的...

    easyui DataGrid 数据表格 属性

    EasyUI 是一个基于 jQuery 的 UI 插件集合体,它提供了丰富的用户界面组件,包括 DataGrid,这是一个用于展示数据的表格组件。DataGrid 具有众多可配置的属性,可以帮助开发者构建功能强大的数据展示和管理界面。这...

    Jquery_easyui_switchbutton【案例】

    在本文中,我们将深入探讨jQuery EasyUI中的SwitchButton组件,这是一种用于创建切换开关效果的工具,常用于实现二选一的交互操作。EasyUI是基于jQuery的一个轻量级且强大的前端开发框架,它提供了一系列易于使用的...

    JQuery_EasyUI_DataGrid_中文文档

    16. `singleSelect`:布尔类型,若设置为 true,只允许用户选中一行。默认值为 false。 17. `fit`:布尔类型,如果设置为 true,DataGrid 将根据其父容器自动调整大小。默认值为 false。 18. `pageNumber`:数值...

    jquery-easyui官方示例及API文档中文版

    - `$.fndatagrid`方法用于操作DataGrid,包括加载数据、设置列宽、获取选中行等。 - `$.fncombobox`方法则涉及下拉框的使用,如填充数据、获取选中值等。 四、示例的重要性 官方示例是学习和实践jQuery EasyUI的...

    easyUI,datagrid小样例

    4. **事件处理**:EasyUI 提供了丰富的事件机制,如 onDblClickRow(双击行事件)、onClickRow(点击行事件)、onLoadSuccess(数据加载成功事件)等,开发者可以通过监听这些事件来扩展 Datagrid 的功能。...

    easyUI datagrid 做的工程

    新增通常通过弹出对话框添加新记录,删除是选中行后确认删除,修改则是在选定单元格内直接编辑,查看通常是点击一行后显示详细信息。 3. **布局管理**:EasyUI 提供了丰富的布局组件,如 panel、window、dialog 等...

    EasyUI_05-datagrid-src.zip

    EasyUI 是一个基于 jQuery 的前端框架,主要用于构建用户界面,尤其在企业级Web应用中广泛应用。这个名为 "EasyUI_05-datagrid-src.zip" 的压缩包文件很可能包含的是EasyUI框架中关于datagrid组件的源代码和相关资源...

    easyui的datagrid中editor和combobox的级联

    实现级联编辑器的关键在于监听Datagrid的`onRowContextMenu`或`onClickRow`事件,当用户选择某一行时,我们可以获取到当前行的数据,并根据这些数据来更新下一级Combobox的选项。例如,假设我们有一个地区-城市的...

Global site tag (gtag.js) - Google Analytics