DevExpress GridControl 使用瀑布加载方式加载数据
从事winform开发已经快三年了,这三年中两年使用DevExpress控件进行winform系统开发,对Dev控件有自己的一些思考,下面就常用的表格控件GridControl的分页进行一些讨论。
在平时的系统开发中,对不对C/S系统中的列表进行分页,我和同事也有不一样的见解。同事认为C/S中Grid不必分页,因为分页会对数据的查看带来不便,但是又会遇到数据量较大,传输的压力,他倾向于使用查询条件来约束查询返回的数据量。我们的系统一开始也的确是这么实现的。不进行任何分页处理,一次查询出所有满足条件的记录。但是项目后期发现,我们的想法在一般的界面不会出现任何问题。但是极个别窗体会出现明显的卡顿,数据量太大,简直不忍直视,这使得我必须去找到一种合理的解决方式来改善这个问题。
传统的分页
我引用 我学习Dev控件时看的一篇帖子的一张图,这张图来自博客园中 伍华聪大哥 的 博客(多有冒犯,如对伍华聪大哥带来不方便的地方,我立刻删除。)
如何Windows分页控件中增加统计功能

这种分页方式是我们最最常见的一种方式,可以自由选择查看的页数和上一页,下一页,通用性较好且比较直观,大方。
瀑布流的分页

这种分页方式有些借鉴网页瀑布流,采用下拉滚动条或者使用鼠标滚轮来实现延时加载的方式,这种方式给用户带来的体验会比传统的方式好一些,如果控制每次加载的记录条数合理,用户完全感受不到数据时延迟加载的。
如何实现
熟悉Dev控件的朋友估计看出来了,这是一个默认设置的GridControl+GridView控件,要实现这个效果,首先我考虑的是如何检测滚轮事件。通过谷歌找到Dev官方的问答找到了这么一个事件TopRowChanged,这个事件会在GridView中可见的首行记录发生变化时触发。没错,就是这个事件的贡献帮助我们完成这种分页模式。
下面就是方法的实现
int currentIndex = 1;
int currentCount = -1;
int totalCount = -1;
VirtualData data = null;
List<Student> StudentList = null;
private void btnQuery_Click(object sender, EventArgs e)
{
data = new VirtualData();
gridView1.TopRowChanged += gridView1_TopRowChanged;
currentIndex = 1;
var dataSource = data.Query(currentIndex, out totalCount);
StudentList = dataSource.ToList();
gridControl1.DataSource = StudentList;
currentCount = StudentList.Count;
this.labelControl1.Text = "记录总数: " + totalCount.ToString();
}
private void gridView1_TopRowChanged(object sender, EventArgs e)
{
if (gridView1.IsRowVisible(currentCount - 10) == DevExpress.XtraGrid.Views.Grid.RowVisibleState.Visible)
{
gridView1.TopRowChanged -= gridView1_TopRowChanged;
var dataSource = data.Query(++currentIndex, out totalCount);
StudentList.AddRange(dataSource);
gridControl1.RefreshDataSource();
currentCount = StudentList.Count;
if (dataSource.Count == 100)
{
gridView1.TopRowChanged += gridView1_TopRowChanged;
}
}
}
总结:这两种方式都有自己的优点,已经在上面进行了分析,当然,只有适合自己项目的方式才是好的方式。
我会在后面将上面的代码进行封装,够成新的PageGridControl,方便调用。
最后,这是本人第一次发帖子,很多地方不懂,需要向各位博客园的朋友进行学习,所以你对这篇文章有什么意见和建议,欢迎留言,我会及时进行回复,但请喷子绕道。
最后发布Demo文件的链接: GridControlFlowDataDemo.rar
DevExpress GridControl 使用瀑布加载方式加载数据的更多相关文章
- 实现DevExpress GridControl 只有鼠标双击后才进行修改数据
1. 实现DevExpress GridControl 只有鼠标双击后才进行修改数据:修改GridView.OptionsBehavior.EditorShowMode属性为Click 2. 实现De ...
- 浅谈Entity Framework中的数据加载方式
如果你还没有接触过或者根本不了解什么是Entity Framework,那么请看这里http://www.entityframeworktutorial.net/EntityFramework-Arc ...
- 动态链接库知识点总结之三(如何以显示的方式加载DLL)
总结一下如何显示加载方式加载DLL, 首先,我们新建一个win32项目,选择dll,空项目,再添加一个源文件,一个模块定义文件(.def),具体如下图.(详细方法已经在前两篇文章中讲述,如有不懂,打开 ...
- CSS3学习总结——实现瀑布流布局与无限加载图片相册
首先给大家看一下瀑布流布局与无限加载图片相册效果图: 一.pic1.html页面代码如下: <!DOCTYPE html> <html> <head> <me ...
- iOS 正确选择图片加载方式
正确选择图片加载方式能够对内存优化起到很大的作用,常见的图片加载方式有下面三种: //方法1 UIImage *imag1 = [UIImage imageNamed:@"image.png ...
- jQuery瀑布流从不同方向加载3种效果演示
很实用的一款插件jQuery瀑布流从不同方向加载3种效果演示在线预览 下载地址 实例代码 <section class="grid-wrap"> <ul clas ...
- ios 图片的两种加载方式
控件加载图片,plist,懒加载,序列帧动画,添加动画效果. IOS中有2种加载图片的方式. 方式一:有缓存(图片所占用的内存会一直停留在程序中) + (UIImage *)imageNamed:(N ...
- MVC Ajax Helper或jQuery异步方式加载部分视图
Model: namespace MvcApplication1.Models { public class Team { public string Preletter { get; set; } ...
- sql*loader的直接加载方式和传统加载方式的性能差异
1.确认数据库版本 2.数据准备 3.创建导入表及控制文件 4.直接加载方式演示 查看具体的日志: 5.传统加载方式演示 查看日志文件: 6.结论及两种方式的差异 经过比对direct比convent ...
随机推荐
- 【网络开发】详谈socket请求Web服务器过程
最开始我们需要明白一件事情,因为这是这篇文章的前提: HTTP协议只是一个应用层协议,它底层是通过TCP进行传输数据的.因此,浏览器访问Web服务器的过程必须先有"连接建立"的发生 ...
- 测试报告ExtentReport改进
具体步骤Step-1:在pom.xml文件中添加 Maven 依赖包 <?xml version="1.0" encoding="UTF-8"?> ...
- 查看端口被哪个程序占用的DOS命令
netstat -aon | findstr 80Proto Local Address Foreign Address State PID==== ============ ============ ...
- Cookie 允许第三方cookie
这样本地调线上的接口,就可以使用线上接口生成的cookie了. 或者允许,或者增加白名单.
- mycat实现读写分离
1 mysql已经配置好了主从 2 linux 安装java环境 3 linux 安装mycat cd /usr/local # 下载mycat wget http://dl.mycat.io/1.6 ...
- CF1033C Permutation Game
题目描述 输入输出样例 输入 #1 输出 #1 BAAAABAB 输入 #2 输出 #2 ABAAAABBBAABAAB 数据范围 1<=n<=1e5,1<=ai<=n 解题思 ...
- DFS解决八皇后问题
2019-07-29 16:49:15 #include <bits/stdc++.h> using namespace std; ][]; int tot; int check(int ...
- Ubuntu下载搜狗输入法
实在...因为百度上写的就很好了,所以这里就直接“链”了.. https://jingyan.baidu.com/article/2d5afd6933a67b85a2e28e9f.html
- 3. Spark SQL解析
3.1 新的起始点SparkSession 在老的版本中,SparkSQL提供两种SQL查询起始点,一个叫SQLContext,用于Spark自己提供的SQL查询,一个叫HiveContext,用于连 ...
- L2R 三:常用工具包介绍之 XGBoost与LightGBM
L2R最常用的包就是XGBoost 和LightGBM,xgboost因为其性能及快速处理能力,在机器学习比赛中成为常用的开源工具包, 2016年微软开源了旗下的lightgbm(插句题外话:微软的人 ...