最近使用 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

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

  1. 搜狗浏览器在高速模式下,右键点击才会出现“审查元素”

    搜狗浏览器在高速模式下,右键点击才会出现"审查元素", 学习javascript!!!

  2. jqGrid multiselect多选模式下 multiboxonly设置为true 点击行原选中行会被重置问题处理

    在之前的博文 "jqGrid 获取选中行注意事项及封装 直接返回行数据而不是rowId",曾提到过jqGrid在多选模式下,默认点击行即可选中.取消该行,如果表格构造的时候设置mu ...

  3. jqGrid可编辑模式下 单元格内容不能复制处理

    jqGrid不可编辑模式下,鼠标点击单元格内容并选中要复制的内容,然后就可以复制.粘贴:然而在可编辑模式下则行不通,一旦单元格鼠标点击后,若该列不可编辑则表格会失去焦点,从而导致选中的内容丢失,因此无 ...

  4. 保护模式下寻址(易懂)

    网上看到的一强帖,不转不行了,牛人啊,把这段代码拿捏的相当到位 括号中是我的加注 段机制轻松体验 [内存寻址] 实模式下的内存寻址: 让我们首先来回顾实模式下的寻址方式 段首地址×16+偏移量 = 物 ...

  5. 自动驾驶仿真软件SCANeR studio(四)scenario模式下脚本

    如何创建脚本 scenario模式下 1.点击storyboard旁边三个点-->add step 2.点击scripts旁边三个点-->add mice script 脚本内容 1. I ...

  6. html怎么处理360兼容,在360的兼容模式下关于innerHTML=“”,引发的问题

    innerHTML属性,可以动态设置和修改dom,但是在360的兼容模式下回存在一些问题...... var dBody = document.body; var fatherDom = docume ...

  7. 微服务模式下,实现前后端多资源服务调用

    Micro Services 首先,我先解释下,文章标题的意思: 咋看起来特别像是一个标题党????,可能是我没想好怎么表达,其实白话文就是:在微服务场景下,肯定会有很多子服务API,那多个前端项目如 ...

  8. vue 刷新嵌套路由_vue router嵌套路由在history模式下刷新无法渲染页面问题的解决方法...

    解决vue-router嵌套路由(子路由)在history模式下刷新无法渲染页面的问题,具体内容如下 一. 异常描述 本来使用的是vue-router的hash模式,但是hash模式下url需要带&q ...

  9. Vue 爬坑之旅 -- history 路由模式下微信分享爬坑总结

    现在做 H5 开发,微信平台基本是一个绕不过去的坑,这里面又分为微信授权和微信分享.说它坑,主要提现在以下几个方面: 文档不够清晰详细.开发文档这块是国内所有互联网公司的通病,文档写的不清不楚,长期不 ...

最新文章

  1. 14-Providing protection for complex software
  2. Java 中这些常用关键字,总有那么些被你遗忘的
  3. 动态生成的DOM做点击事件无效
  4. wiki文档书写格式
  5. leetcode 368. Largest Divisible Subset | 368. 最大整除子集(动态规划详解)
  6. Cortex-M3 动态加载一(地址无关代码实现)
  7. vue+vant 移动端H5 商城项目_01
  8. 电动汽车真的省钱吗?
  9. 求出现重现次数最多的字母,如有多个反复的则都求出来
  10. 大神带你实现 NLP 从入门到获奖,还有免费算力可以薅
  11. 如何找回 Mac 上 App 或服务器的密码?
  12. 大华摄像头解码 ffmpeg_解码矩阵配套液晶拼接屏系统解决安防行业设备过于复杂的问题...
  13. 世界500强面试题----反应能力
  14. qtdesigner设计表格_Qt Designer下的一些基础操作
  15. 轻量型网络之MobileNetV2: Inverted Residuals and Linear Bottlenecks论文学习
  16. Mysql中删除语句delete、truncate、drop的区别
  17. LayUI - 富文本编辑器
  18. 统计学习方法---李航
  19. A1490. osu!(乔明达)|概率与期望|卡常|矩阵
  20. 【溢出隐藏】溢出隐藏

热门文章

  1. windebug常用命令
  2. 不安装oracle客户端如何用plsql连接oracle
  3. 【liferay】6、关于liferay中使用requestMapping映射地址提交表单
  4. :after伪类+content经典应用举例
  5. iOS 设置系统音量和监听系统音量变化
  6. 练习作品13:电子试卷自动生成软件
  7. android 小工具:pc 上用 curl 命令打开手机浏览器,浏览指定网址
  8. ubuntu20 编译dpdk错误 -Werror=address-of-packed-member
  9. 计算机无法安装系统,一招就能搞定“这台电脑无法安装 Windows 11”的解决方法...
  10. 男生学计算机哪专业好,男生学计算机科学与技术专业好不好有前途吗