DevExpress的GridControl的实时加载数据解决方案(取代分页)

传统的Winform(不使用第三方控件)针对DataGridView的实时加载数据的文章请看这里

http://www.cnblogs.com/liulun/archive/2009/09/28/1576000.html

DevExpress是一套第三方控件

其中有类似DataGridView的控件

今天把针对DevExpress.XtraGrid.GridControl实时加载数据的功能开发出来了

分享给大家

欢迎讨论

Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;

using DevExpress.XtraGrid;
using DevExpress.XtraGrid.Views.Grid;

namespace Life365.CallCenter
{
    public class GridCreator<T> where T: new()
    {
        //一页有多少条数据
        private int page_size = 30;
        public int PageSize
        {
            get { return page_size; }
        }
        /// <summary>
        /// 过滤条件
        /// </summary>
        public string Filter
        {
            get;
            set;
        }
        /// <summary>
        /// 排序条件
        /// </summary>
        public string OrderBy
        {
            get;
            set;
        }
        /// <summary>
        /// 数据访问类
        /// </summary>
        public BaseProxy Proxy
        {
            get;
            set;
        }
        private int row_count;
        /// <summary>
        /// 总行数
        /// </summary>
        public int RowCount
        {
            get {return row_count;}
        }
        private int page_num = 1;
        /// <summary>
        /// 当前的数据页
        /// </summary>
        public int PageNum
        {
            get { return page_num; }
        }
        //缓存的数据
        private List<T> data_list = new List<T>();

        private GridCreator()
        { 
        }
        /// <summary>
        /// 构造函数
        /// </summary>
        public GridCreator(GridControl grid,BaseProxy proxy)
        {
            ((GridView)grid.MainView).TopRowChanged += new EventHandler(grid_TopRowChanged);
            this.Proxy = proxy;
            grid.DataSource = data_list;
        }
        /// <summary>
        /// 获取前两页数据
        /// </summary>
        private void GetTwoPageData()
        {
            data_list.InsertRange(0, GetData());
            page_num++;
            data_list.InsertRange(page_size, GetData());
        }        
        /// <summary>
        /// grid下拉事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void grid_TopRowChanged(object sender, EventArgs e)
        {
            GridView grid = sender as GridView;
            if (grid.TopRowIndex >= (page_num - 1) * page_size)
            {
                //当看完一页数据的时候开始取数据
                page_num++;
                List<T> test = GetData();
                data_list.InsertRange((page_num - 1)* page_size, test);
            }
        }
        /// <summary>
        /// 实时的加载数据函数
        /// </summary>
        /// <returns></returns>
        public List<T> GetData()
        {
            return Proxy.GetDataList(this.Filter, this.OrderBy, this.page_size,this.page_num, ref this.row_count) as List<T>;
        }

    }
}

T泛型约束是需要加载数据的类型

BaseProxy是访问数据库的基类,其中包含GetDataList的虚方法

继承自BaseProxy的GetDataList为

Code
        public override object GetDataList(string filter, string order_by, int page_size, int page_num, ref int count)
        {
            count = 1000;
            List<RegionEntity> regions = new List<RegionEntity>();
            for (int i = 0; i < page_size; i++)
            {
                regions.Add(new RegionEntity() { SR_RegionName = ((page_num-1)*page_size+i).ToString() });
            }
            return regions;
        }

这里的RegionEntity就是前面提到的某一种类型的T

数据提供程序是模拟出来的(测试驱动开发,哈哈)

你可以在这个函数里写数据库访问方法

 

具体调用方法如下

Code
GridCreator<RegionEntity> creator = new GridCreator<RegionEntity>(gridShop,new UtilsProxy());

UtilsProxy类继承自BaseProxy并重写了GetDataList方法

gridShop就是当前窗体的DevExpress.XtraGrid.GridControl控件

RegionEntity针对泛型类型

用起来还是蛮方便的

 

2009.12.14夜做代码包如下:

代码包中包含显示datatable数据的工具方法

并公布了我的数据访问层
http://files.cnblogs.com/liulun/dev_grid_demo.rar

时间: 2024-08-18 02:44:51

DevExpress的GridControl的实时加载数据解决方案(取代分页)的相关文章

WinForm程序虚拟分页(实时加载数据)

Windows应用程序中很少见有分页的程序 文件夹中有上万个文件的时候微软也没让用户来翻页查看列表 记事本中的文字,某个系统功能的列表也都没有分页.(Word文档是个例外) 知道web中的分页是怎么做出来的朋友一定知道winform做分页会更简单 winform程序一样也不允许用户一下子把数据库中上万条数据全部检索出来 那么怎么让winform程序即不用翻页,又能分部加载数据呢 代码如下: 一:窗体类 Code    public partial class Form1 : Form    { 

Android中ListView如何分页加载数据_Android

熟悉Android的朋友们都知道,不管是微博客户端还是新闻客户端,都离不开列表组件,可以说列表组件是Android数据展现方面最重要的组件,我们今天就要讲一讲列表组件ListView加载数据的相关内容.通常来说,一个应用在展现大量数据时,不会将全部的可用数据都呈现给用户,因为这不管对于服务端还是客户端来说都是不小的压力,因此,很多应用都是采用分批次加载的形式来获取用户所需的数据.比如:微博客户端可能会在用户滑动至列表底端时自动加载下一页数据,也可能在底部放置一个"加载更多"按钮,用户点

jurey tab-iframe 加载数据出现同事访问数据库后数据相同

问题描述 iframe 加载数据出现同事访问数据库后数据相同 现在第一项和第五项数据时一样的.请大神帮我看下这个应该怎么改.(使用bootstrap框架) web.xml <servlet> <servlet-name>TrendChart</servlet-name> <servlet-class>web.TrendChartServlet</servlet-class> </servlet> <servlet-mapping

ios-UITableView从jsonURL加载数据

问题描述 UITableView从jsonURL加载数据 在UITableview的JSON的URL绑定数据,但是在执行过程中报错. NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; NSString *json_string = [[NSString alloc] initWithData:response encoding:NSUTF8Str

Windows 8 Store Apps学习(54) 绑定: 增量方式加载数据

介绍 重新想象 Windows 8 Store Apps 之 绑定 通过实现 ISupportIncrementalLoading 接口,为 ListViewBase 的增量加载提供数据 示例 实现 ISupportIncrementalLoading 接口,以便为 ListViewBase 的增量加载提供数据 Binding/MyIncrementalLoading.cs /* * 演示如何实现 ISupportIncrementalLoading 接口,以便为 ListViewBase 的增

SharePoint中如何实现ajax异步加载数据

初到公司,由原想的asp.net开发转向了SharePoint(简称SP)开发,个人感觉与之前差别不大,今天用sp实现异步加载数据的时候遇到点问题,之前在asp.net下一步都是用 jquery.ajax + .ashx 来实现,可是在sp下创建项的时候木有发现有ashx页面可以创建,那sp下如何实现异步加载数据那,有以下几种方式: 1.创建MyModule类实现IHttpModule借口并在主web.config下配置该节点,在里面添加事件处理,并添加类MyHandler实现IHttpHand

Windows Phone利用Async CTP实现异步加载数据

Async CTP是个好东西额,就是安装的时候比较坑- 跟N多补丁冲突,只要安装顺序对了才能顺利装上- 可以参考下以前写的:http://www.cnblogs.com/sun8134/archive/2011/09/19/2181030.html 异步是个好东西,可以让后台数据操作时前台也有反应而不是卡死 安装好Async CTP后,只要在wp项目中引用AsyncCtpLibrary_Phone.dll就可以使用async和await来实现异步加载了 MS已经封装好了一些异步操作,比如WebC

jQuery结合AJAX之在页面滚动时从服务器加载数据

  这篇文章主要介绍了jQuery结合AJAX之在页面滚动时从服务器加载数据,文中示例服务器端为C#程序,需要的朋友可以参考下 简介 文本将演示怎么在滚动滚动条时从服务器端下载数据.用AJAX技术从服务器端加载数据有助于改善任何web应用的性能表现,因为在打开页面时,只有一屏的数据从服务器端加载了,需要更多的数据时,可以随着用户滚动滚动条再从服务器端加载. 背景 是Facebook促使我写出了在滚动条滚动时再从服务器加载数据的代码.浏览facebook时,我很惊讶的发现当我滚动页面时,新的来自服

浏览器窗口滚动加载数据采用异步形式从后台加载数据

 在滚动条距顶部距离(页面超出窗口的高度)时采用异步形式从后台加载数据,下面是具体的实现,希望对大家有所帮助 以下滚动效果为在网上查找.    在滚动条距顶部距离(页面超出窗口的高度)时采用异步形式从后台加载数据  代码如下: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ScrollLoadData.aspx.cs" Inherits="WebApplicat