cxGrid 在 GridMode = True 模式下实现标题点击排序以及标题列过滤筛选!!!

最近使用 cxGrid 这个表格控件,发现加载十几万笔数据时加载特别慢,同时用 DBGridEh 加载来对比,发现速度差异很大,

原来是 cxGrid 的 GridView 默认 GridMode=False ,此时加载数据集时会设置每一列的属性(例如把每一列的不同值转入筛选器中),

所以速度会慢很多,所以把 GridMode=True 后,速度和 DBGridEh 差不多了,但是问题来了,设置这个属性后,原本的点击

标题列功能无法排序,然后列筛序也不能使用。(要知道,这个2个功能是cxGrid 的特色,如果无法使用,那还不如使用DBGridEh)。

通过上网搜索了一下,基本能实现这2个功能,不过没有封装成通用的方法,还请大家多提出意见,代码如下:

1.标题点击排序功能:

procedure TForm1.cxGrid1DBBandedTableView1DataControllerSortingChanged(Sender: TObject);
vari:Integer;sortstr:string;
begintrysortstr:='';for i:= 0 to cxGrid1DBBandedTableView1.ColumnCount - 1 dobeginwith  cxGrid1DBBandedTableView1.Columns[i] dobegincase  SortOrder  ofsoAscending:beginif sortstr<>'' thensortstr:=sortstr+',';sortstr:=sortstr+DataBinding.FieldName;end;soDescending:beginif sortstr<>'' thensortstr:=sortstr+',';sortstr:=sortstr+DataBinding.FieldName+' DESC';end;end;end;end;if sortstr<>'' thenad.Sort:=sortstr;finallyend;
end;

 我用的是 adodataset 数据组件,加上以上代码可以多列排序。注意:需要添加  dxCore 单元才能使用 SoDescending 等变量。

2.实现列筛选代码如下:

varn,i: integer;field: string;
beginfield := cxGrid1DBBandedTableView1.Columns[AItemIndex].DataBinding.FieldName;qy.close;qy.SQL.Clear;qy.SQL.Add('select distinct '+field+' from mbrecord ');qy.Open;n := qy.RecordCount;qy.First;for i := 0 to n-1 dobeginAValueList.Add(fvivalue,qy.FieldValues[field],vartostr(qy.FieldValues[field]),false);qy.Next;end;
end;

 以上代码是加载没一列的筛选值列表;

 

procedure TForm1.cxGrid1DBBandedTableView1DataControllerFilterChanged(Sender: TObject);
beginad.Filtered:=False;if cxGrid1DBBandedTableView1.DataController.Filter.FilterText<>'' thenbeginad.Filter:=cxGrid1DBBandedTableView1.DataController.Filter.FilterText;Tryad.Filtered:=True;FinallyEnd; end;
end;

 以上代码是当选择筛选值后,对应要执行的数据查询方法;

   注意: 这个语句

ad.Filter:=cxGrid1DBBandedTableView1.DataController.Filter.FilterText;

不能直接这样写,需要转移一下,因为如果你的标题列标题是中文的话,那么这个 FilterText 也是中文的名字,

所以要把这个 FilterText 中的中文替换成对应的英文字段才可以使用。而且数据筛选后,
表格 DataController 的 recordcount 总数是不会变的,除非你的 DataSet 使用的是 Open 而不是过滤方式。
这样一来,有很多地方要写代码,很麻烦,如果数据量少,还是建议使用 GridMode=False 方式吧。

转载于:https://www.cnblogs.com/lpq21314/p/6010998.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/283546.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker学习笔记

简介 Docker 属于 Linux 容器的一种封装&#xff0c;提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。 Docker 将应用程序与该程序的依赖&#xff0c;打包在一个文件里面。运行这个文件&#xff0c;就会生成一个虚拟容器。程序在这个虚拟容器里运行&#xf…

python访问数据库

1. python DB api简介 python DB api python访问数据库的统一接口规范&#xff0c;详细可参考https://www.python.org/dev/peps/pep-0249/python DB api中主要包括三个重要的对象 数据库连接对象 connection&#xff0c;数据库交互对象 cursor和数据库异常类 exceptions2. 使用…

错误:“filesystem“ 不是 “std“ 的成员

分析原因&#xff1a;应该项目是C版本问题 1、项目属性 → 配置属性 → 常规 → C语言标准 2、项目属性 → C/C → 语言 → C语言标准 3、项目属性 → C/C → 建议行 → 其它选项 → 添加&#xff1a;/Zc:__cplusplus

Blazor预研与实战

背景最近一直在搞一件事&#xff0c;就是熟悉Blazor&#xff0c;后期需要将Blazor真正运用到项目内。前期做了一些调研&#xff0c;包括但不限于Blazor知识学习组件库生态预研与现有SPA框架做比对与WebForm做比对自己动手做个演示项目最终的体验非常不错&#xff0c;功能全面。…

MySQL Internals Manual

http://dev.mysql.com/doc/internals/en/

导入工程后编译不过,报错: apply plugin: 'com.github.dcendents.android-maven'

编译时报错&#xff1a; Error:(2, 0) No service of type Factory apply plugin: com.github.dcendents.android-maven 原来是导入工程时修改了根目录下的build.gradle的android gradle版本。 源码gradle版本是1.1.3&#xff0c;导入工程后修改为2.2.2&#xff0c;修改gradle-…

并发编程10大坑,你踩过几个?

目录 前言 1. SimpleDateFormat线程不安全 2. 双重检查锁的漏洞 3. volatile的原子性 4. 死锁 4.1 缩小锁的范围 4.2 保证锁的顺序 5. 没释放锁 6. HashMap导致内存溢出 7. 使用默认线程池 8. Async注解的陷阱 9. 自旋锁浪费cpu资源 10. ThreadLocal用完没清空 前…

CAP理论与MongoDB一致性、可用性的一些思考

大约在五六年前&#xff0c;第一次接触到了当时已经是hot topic的NoSql。不过那个时候学的用的都是mysql&#xff0c;Nosql对于我而言还是新事物&#xff0c;并没有真正使用&#xff0c;只是不明觉厉。但是印象深刻的是这么一张图片&#xff08;后来google到图片来自这里&#…

十年老站吐血迁移实录

因为一些内容审查方面的原因&#xff0c;一个运行了很久的论坛被要求限期迁移出现有机房。管制很严&#xff0c;要求在1-2天内完成。论坛的文件&#xff08;主要是图片及附件&#xff09;100多G,数据库有80G。我评估了一下&#xff0c;导出数据&#xff0c;部署新环境&#xff…

【开源】一个WPF开发的XML记事本

今天推荐一个WPF开源项目&#xff1a;XmlNotepad[1]。此仓库由 WPF开发者[2] 推荐&#xff0c;站长简单翻译分享。介绍XML Notepad[3] 是一个 Windows 程序&#xff0c;它为浏览和编辑 XML 文档提供了一个简单直观的用户界面。有四种安装方式&#xff1a;ClickOnce 安装程序[4]…

log4j2 mybatis 显示 sql 和 结果集

为什么80%的码农都做不了架构师&#xff1f;>>> 首先说明版本&#xff1a; log4j 版本是 第2版beta9&#xff0c;引用jar包 log4j-api-2.0-beta9.jar log4j-core-2.0-beta9.jar mybatis 是 mybatis-3.2.3 log4j2 配置 如下&#xff0c;命名为 log4j2.xml&#xff0…

深入解析volatile关键字

目录 1. 初步认识volatile 2. volatile的特性一&#xff1a;保证可见性 2.1 volatile关键字是如何保证可见性的&#xff1f; 2.2 从JMM来看可见性 2.3 从硬件层面了解可见性的本质 2.3.1 CPU高速缓存 2.3.2 缓存一致性 2.3.3 MESI 协议 2.3.4 缓存一致性小结 3. vola…

Nginx基础配置

一、主配置文件结构main block&#xff1b;#全局块配置全局生效event{#事件驱动相关配置 }http{#http/https协议相关配置段 server { ... }&#xff1a;#每个server用于定义一个虚拟主机&#xff1b; server { ... server_name root alias location [OPERATOR] URL { ... if CO…

上周面试回来后写的Java面试总结,想进BAT必看

上周陪同之前一起工作的同事去面试&#xff08;乔治&#xff0c;小袁&#xff0c;鹏飞&#xff08;面试人&#xff09;&#xff09;&#xff0c;第一站是去深圳&#xff0c;第二站上海&#xff0c;第三站杭州。面试什么公司我在这里就不多说了&#xff0c;你们知道是一线公司就…

从贝叶斯方法谈到贝叶斯网络

从贝叶斯方法谈到贝叶斯网络0 引言其实。介绍贝叶斯定理、贝叶斯方法、贝叶斯判断的资料、书籍不少&#xff0c;比方《数理统计学简史》&#xff0c;以及《统计决策论及贝叶斯分析 James O.Berger著》等等&#xff0c;然介绍贝叶斯网络的中文资料则非常少。中文书籍总共也没几本…

k8s 读书笔记 - kubectl 命令行工具用法详解

kubectl 在 k8s 集群中作为 客户端 CLI 工具&#xff0c;可以让用户使用 kubectl 工具执行命令行&#xff0c;并通过使用 k8s API 与 k8s 集群的控制面&#xff08;kube-controller-manager&#xff09;进行通信。kubectl 语法格式kubectl 命令行的语法格式如下&#xff1a;kub…

初级必备:单例模式的7个问题

故事 实话实说&#xff0c;关于单例模式&#xff0c;网上有N多个版本。你估计也看过很多版本。但看完了又能怎样&#xff1f;我技术群里的一位小伙伴&#xff0c;上周面试&#xff0c;就因为一个单例模式&#xff0c;然后叫他回去等通知了。 下面是这位同学被问到的问题&…

Spring AOP源码解析——AOP动态代理原理和实现方式

2019独角兽企业重金招聘Python工程师标准>>> Spring介绍 Spring(http://spring.io/)是一个轻量级的Java 开发框架&#xff0c;同时也是轻量级的IoC和AOP的容器框架&#xff0c;主要是针对JavaBean的生命周期进行管理的轻量级容器&#xff0c;可以单独使用&#xff0…

使用.NET构建简单的高性能Redis(三)

译者注该原文是Ayende Rahien大佬业余自己在使用C# 和 .NET构建一个简单、高性能兼容Redis协议的数据库的经历。首先这个"Redis"是非常简单的实现&#xff0c;但是他在优化这个简单"Redis"路程很有趣&#xff0c;也能给我们在从事性能优化工作时带来一些启…

Java 日志格式规范

目录 1 简介 1.1 日志的作用 1.2 撰写日志的要求 1.2.1 日志的可读性 1.2.2 日志的性能 1.2.3 占用磁盘空间 1.2.4 日志的时效性 1.2.6 日志内容 1.2.7 日志格式 2 日志级别和含义 2.1 Log4j的组成 2.1.1 Logger 2.1.2 Appenders 2.1.3 Layout 2.2 日志级别 2.…