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如何实现点击表头后表格自动排序,其中包含数字排序.字符串排序以及日期格式的排序,文中给出了完整的示例代码,并做了注释,相信大家都能看懂,感兴趣的朋友们一起来看看吧. < ...
随机推荐
- 【转载】eclipse调试arm裸机程序
一.集成开发环境 软件部分:eclipse , GDB Server , Jlink软件 硬件部分:Jlink硬件 准备工作1:从SD/NOR Flash启动,格式化nand flash 准备工作2: ...
- 【转】关系映射文件***.hbm.xml详解
http://blog.sina.com.cn/s/blog_7ffb8dd5010144yo.html 附.Oracle使用标准.可变长度的内部格式来存储数字.这个内部格式精度可以高达38位. NU ...
- python函数 位置参数,关键字参数,可变参数优先级
def fun(arg,args=1,*arg,**keywords): python 一共有这四类参数,第一类最常见,不用多说,第二类,关键字参数,python能通过关键字找到参数,python函数 ...
- history.back(-1)和history.go(-1)的区别
history.back(-1):直接返回当前页的上一页,数据全部消息,是个新页面 history.go(-1):也是返回当前页的上一页,不过表单里的数据全部还在 返回到指定连接:document.l ...
- Servlet跳转到Jsp的指定div
问题: 首页点击一个连接,切换div(id = cc_bi) <div id="K_a"> <a href ...
- Android开发-API指南-<data>
<data> 英文原文:http://developer.android.com/guide/topics/manifest/data-element.html 采集(更新)日期:2014 ...
- 如何创建下拉列表为一个树列表?(此文为dev控件中,服务器控件暂不知,但想方法应该都差不多吧)
//前端控件代码:<dx:ASPxDropDownEdit ID="drop_treelist" runat="server" ClientInstanc ...
- Collection集合之六大接口(Collection、Set、List、Map、Iterator和Comparable)
首先,我们先看一下Collection集合的基本结构: 1.Collection接口 Collection是最基本集合接口,它定义了一组允许重复的对象.Collection接口派生了两个子接口Set和 ...
- centos下的防火墙配置
1,查看防火墙文件: vim /etc/sysconfig/iptables # Generated by iptables-save v1. :: *filter :INPUT ACCEPT [:] ...
- 【spring 4】AOP:动态代理
一.动态代理简介 动态代理与普通代理相比较,最大的好处是接口中声明的所有方法都被转移到一个集中的方法中处理(invoke),这样,在接口方法数量比较多的时候,我们可以进行灵活处理,而不需要像静态代理那 ...