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如何实现点击表头后表格自动排序,其中包含数字排序.字符串排序以及日期格式的排序,文中给出了完整的示例代码,并做了注释,相信大家都能看懂,感兴趣的朋友们一起来看看吧. < ...
随机推荐
- 日志挖掘Logmnr
日志挖掘 9.1 日志中数据用途 所有对用户数据以及数据字典的改变全部被保存在联机日志中.当然nologging,insert/*+append+/情况比较特殊除外,因此归档日志可以用来做数据库的恢复 ...
- vmstat 命令详解 转载
vmstat 命令详解 procs:r-->在运行队列中等待的进程数b-->在等待io的进程数w-->可以进入运行队列但被替换的进程 memoyswap-->现时可用的交换 ...
- android界面布局技巧(一)
(1)//得到手机的宽高 Display display = getWindowManager().getDefaultDisplay(); int screenWidth = display.get ...
- Appium移动自动化测试(四)--先跑起来再说(第一个测试用例-手机YY)
说明 本文将详细说明如何使用Appnium完成:打开手机YY欢迎页面->按住屏幕向左滑动4次->按下"立即体验"按钮->按下"直播"按钮,的整 ...
- 安装office2013时弹出microsoft setup bootstrapper已停止工作,接着就不能安装了
只是说一下自己的解决方法: 我的原因是注册表没有删除改进. 1.输入regedit 2.找到HKEY_LOCAL_MACHINE\software\microsoft\windows\CurrentV ...
- ASP.NET MVC4 学习系统五(Razor)
Razor ,你好! Razor 是一种把代码和内容进行平滑集成的语法.尽管它引入了一些新的符号和关键字,但是Razor并不是一种新的语法.相反,Razor允许用户使用已知的语言来编写代码 ...
- python常用内置函数
Python所以内置函数如下: 下面列举一些常用的内置函数: chr()和ord() chr()将数字转换为对应的ascii码表字母 >>> r=chr(65) >>&g ...
- 避免使用CreateThread函数,导致的内存泄露
原文链接:http://blog.csdn.net/solosure/article/details/6262877
- js设计模式-建造者模式
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- SQL 2008配置管理工具服务显示 远程过程调用失败0x800706be
摘自: http://www.cnblogs.com/cool-fire/archive/2012/09/15/2686131.html 基本上我的解决方案也是根据该文提示 操作的. 因为 我后来 装 ...