DBGridEh 点击表头排序方法
方法1: (不用编程写代码)
程序中引用 单元 EhLibCDS
设置DBGridEh的属性:
ColumnDefValues.Title.TitleButton = True
OptionsEh = [ghAutoSortMarking, dghMultiSortMarking]
SortLocal = True
参考:
以下翻译来自EhLib/DataService/readme.txt
“在 Ehlib 的 DataService 文件夹下提供了一些可以使数据集实现自动排序的文件。TDBGridEh 使用这些文件中的相关对象可以实现当排序标记发生变化时实现自动排序。
“如果你改变了数据网格及标题的排序标记而没有书写 OnSortMarkingChanged 事件,数据网格将尝试自动进行数据排序。
“DBGridEhDataService尝试通过 GetDatasetFeaturesForDataSet 查找 TDataSet 中可以排序的特定的对象。正如你所知道的,TDataSet 不支持数据排序,但它的派生对象 TQuery 或 TClientDataSet 却允许实现数据排序。
“使用过程 RegisterDatasetFeaturesEh ,你可以注册 TDatasetFeaturesEhClass 类对指定的数据集排序。
“EhLib已经实现了能在TQuery, TADOQuery 和TClientDataSet对象中排序数据的类。简单地通过 uses 子句添加 Ehlib...(EhlibBDE,EhlibADO,EhlibCDS)的单元之一到你的工程的任意单元中,与它们相连的数据网格将自动对该数据集进行排序。 EhLibBDE, EhLibADO, EhLibCDS 通过在单元数据集中调用 RegisterDatasetFeaturesEh 过程来实现初始化。
“对于其它数据集类型,你必须编写、并注册可以实现该数据集排序的新对象。书写过程 T[你的数据集]DatasetFeaturesEh.ApplySorting ,你可以存取那些使用了 SortMarkedColumns 属性的列以实现直接排序。你可以查看 DbUtilsEh 单元中的示例以明白如何编写T[你的数据集]DatasetFeaturesEh 类及查看 EhLibBDE 单元以明白如何注册 T[你的数据集]DatasetFeaturesEh 类。
引擎 数据集 单元文件
BDE TQuery EhLibBDE
ADO TADOQuery EhLibADO
ClientDataSet TClientDataSet EhLibCDS
DBExpress TSQLQuery EhLibDBX
方法2:
在我的OnTitleClick事件中:
case Column.Title.SortMarker of
smNoneEh: Column.Title.SortMarker := smDownEh;
smDownEh: Column.Title.SortMarker := smUpEh;
smUpEh: Column.Title.SortMarker := smNoneEh;
end;
在我的OnSortMarkingChanged事件中:
ShowMessage('marker changed!'); //从来都没运行.Why???????
//添加Order By语句
我的DBGridEh属性页中,OptionsEh里设置:
dghautosortmarking=True;
请用过Ehlib2.1的高手指点一下:如何设置使OnSortMarkingChanged事件发生作用.
在Ehlib的Demo1里,没有设置OnTitleClick事件,不知为何也能排序?
set DBGridEh1.Column[i] TitleButton := True
dbgridEh有一个属性frozencols
你设为1,则你的第一列就固定了
设为2,前两列固定,依次。。。
procedure Tbranch_type_frm.dbg1TitleClick(Column: TColumnEh);
begin
if not (adoquery1.IsEmpty) then adoquery1.Sort:=Column.Field.FieldName;
end;
;//排序
第二个问题:Demo中没有对OnTitleClick编程,对OnTitleBtnClick编程已注释,如下:
{ case Column.Title.SortMarker of
smNoneEh: Column.Title.SortMarker := smDownEh;
smDownEh: Column.Title.SortMarker := smUpEh;
smUpEh: Column.Title.SortMarker := smNoneEh;
end;}
而且这段程序的作用只是控制排序显示的上下图标,不产生实际的排序郊果
我自己的解决方法:
procedure TForm1.DBGridEh1TitleClick(Column: TColumnEh);
var
i: Integer;
s: String;
FieldStr: String;
Oldsql,NewSql:String;
begin
LockWindowUpdate((self).Handle);
s := '';
i := Column.Index;
FieldStr := DBGridEh1.Columns[i].FieldName;;
if DBGridEh1.Columns[i].Title.SortMarker = smNoneEh then
begin
DBGridEh1.Columns[i].Title.SortMarker := smDownEh;
s := 'order by '+ FieldStr;
end
else
if DBGridEh1.Columns[i].Title.SortMarker = smDownEh then
begin
DBGridEh1.Columns[i].Title.SortMarker := smupEh;
s := 'order by '+ FieldStr + ' Desc';
end
else
begin
DBGridEh1.Columns[i].Title.SortMarker := smDownEh;
s := 'order by '+ FieldStr;
end;
OldSql := simpleDataSet1.DataSet.CommandText;
i := pos('order by ',OldSql);
if i <> 0 then
NewSql := copy(OldSql,0,i-1) + s
else
NewSql := OldSql + ' ' + s;
if NewSql <> OldSql then begin //如果不相等就开始
SimpleDataSet1.PacketRecords := 10;
SimpleDataSet1.Active := False;
SimpleDataSet1.DataSet.CommandText := NewSql;
SimpleDataSet1.Active := True;
end;
LockWindowUpdate(0);
end;
部分参数:
Flat: True xp风格
Options-dgRowSelect 选择一个则显示一行, (会将edit自动设为False)
字段的 DisplayFormat #,##0.00;-#,##0.00 格式化数字显示
CheckBoxes 设为checkbox控件状. 如果是integer形 则设Footer中的keylist和Picklist,一个是值一个是显示
DBGridEh 点击表头排序方法的更多相关文章
- CList 点击表头排序 (2)两种排序方法中其中一种
上一篇讲解SortItem()方法如何使用,虽然都是抄别人的但是就是想让大家有个大概的了解 CList 点击表头排序 (1)SortItems函数 点击表头排序基本思路都是 1.首先响应HDN_ITE ...
- CList 点击表头排序 (3)两种排序的第二种
在头两篇中介绍了CListCtrl::SortItems() 方法的使用和其中的一个排序方法,这篇介绍另一种方法 CList 点击表头排序 (1)SortItems函数 CList 点击表头排序 (2 ...
- CList 点击表头排序 (1)SortItems函数
点击表头排序整体的思路都是去 CListCtrl类中的方法SortItems去实现 CListCtrl::SortItems的原型是: BOOL SortItems( PFNLVCOMPARE pfn ...
- GridView表头排序方法设置
1.效果图 2.前台代码 说明:红色代码为核心代码 <asp:GridView ID="gvData" runat="server" AutoGenera ...
- swing jTable排序问题(点击表头排序)
1.JDK6自带排序实现: tableName.setAutoCreateRowSorter(true); 2.其实界面设计中勾选一个属性就搞定了: .
- QT中Qtableview视图表格中点击表头进行排序
用QT写了一个小工具,主要是对Excel中大量的数据进行计算和显示. 写了有一段时间,然后断断续续的做一些修改和完善. 因为要显示的数据有多列,很自然的会想到要能够对显示的数据进行排序.如果直接操作m ...
- javascript: 带分组数据的Table表头排序
如下图: 要求:点击表头排序时,"分组"及"分组明细"的数据层次关系不变 从网上找了一段常规的table排序,改了改,以满足“分组支持”,贴在这里备份 < ...
- ElementUI - Table 表头排序
ElementUI - Table 表头自带排序功能,和排序事件,但是目前只是对当前界面的数据进行排序. 项目需求: 点击表头排序的时候,对所有数据进行排序. 初步方案: 在点击排序按钮的时,在排序事 ...
- JS实现点击表头表格自动排序(含数字、字符串、日期)
这篇文章主要介绍了利用JS如何实现点击表头后表格自动排序,其中包含数字排序.字符串排序以及日期格式的排序,文中给出了完整的示例代码,并做了注释,相信大家都能看懂,感兴趣的朋友们一起来看看吧. < ...
随机推荐
- 百度之星IP聚合(水题map&字符处理)
虽然题目停水的,但是好像字符处理运用的还比较合适 Problem Description 当今世界,网络已经无处不在了,小度熊由于犯了错误,当上了度度公司的网络管理员,他手上有大量的 IP列表,小度熊 ...
- GL_INVALID_VALUE(0X501)
当android应该打开GPU的支持后, 有些手机会出现黑屏.闪屏等现象. 跟踪控制台, 会打印日志GL_INVALID_VALUE(0X501). 参考资料:http://mobile.riaos. ...
- 自动生成Makefile时,关于Makefile.am编写
最近编译一个项目的程序时,二十几个源代码文件放在六个文件夹中,而且各个文件中头文件互相包含.以前写过编译这样组织的源码的makefile,所以这次也就直接写了. 确实因为各个文件间的头文件互相包含,造 ...
- UITableViewCell之微博篇
微博篇 本应用所涉及的知识点: 1.UITableView 中的cell 2.模型的创建 3.MJExtension第三方框架的使用 需求分析 1.界面分析 微博界面 界面控件分析: 整个页面 1.不 ...
- Redis单机版安装与部署
Redis官网:http://redis.io 下载Redis wget https://github.com/antirez/redis/archive/3.0.0-rc1.tar.gz 解压并安装 ...
- 一个简单的AJAX实例
创建一个简单的XMLHttpRequest,从一个TXT文件中返回数据. 来源于菜鸟教程 <!DOCTYPE html><html><head><meta c ...
- MFC学习 进程间通信
内存共享通信方式 server.cpp #include <stdio.h> #include <Windows.h> int main() { HANDLE hFile; h ...
- [ CodeVS冲杯之路 ] P1165
不充钱,你怎么AC? 题目:http://codevs.cn/problem/1165/ 题目很简单,代码最好写朴实一点,不要想着哪些情况可以合并在一起啊等等 老老实实一个个判断,不然很容易出错 细节 ...
- 翻译「C++ Rvalue References Explained」C++右值引用详解 Part3:右值引用
本文为第三部分,目录请参阅概述部分:http://www.cnblogs.com/harrywong/p/4220233.html. 右值引用 如果x是任意类型,那么x&&则被称作一个 ...
- EF调用存储过程遇到的问题
注意 实体类Statistics的字段名和存储过程返回集合的列名要相同才行