非 fkData 的字段,如何实现 DBGrid 的 TitleClick 排序?(採 ADO 的 Sort)

jimmygump 2004-11-24 05:14:52
DBGrid 在 TitleClick 进行排序,已经很多人讨论过了
但如果该行的字段是个 fkLookup 或是 fkCalculated 呢?

大家都怎么实现的?(例如: 一个数字的 foreign key 字段,我们在 DBGrid 中显示的是 lookup 出来的有意义文字字段,这 fkLookup 无法指定给 ADO 的 .Sort)

ps. 为了避免采用改变 ORDER BY 子句的方式造成 TADOQuery 关了再开的动作,我用 ADO 的 Sort 比较方便,但目前不知 fkLookup 怎么处理...
...全文
153 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
jimmygump 2004-11-24
  • 打赏
  • 举报
回复
谢谢 bee2518(迷茫ing)

我想,不论 DBGrid 或是 DBGridEh,架构应该类似,我用 DBGrid 也已实做出来了,一般 fkData 都没问题。但目前是针对 fkLookup 无法排序的问题,挺苦恼的...因为的确有其排序的必要!!

例如:
[Area table]
ID AutoInc Primary key
Name Char

[Party table]
ID AutoInc Primary key
Name Char
AreaID Integer Foreign Key References Area(ID) DEFAULT Null
BegDate Date
EndDate Date

在 Party Form 中的 DBGrid 要显示的是:(以 table.field 表示)
Party.Name Area.Name Party.BegDate Party.EndDate

其中 Area.Name 为 fkLookup,就是这栏无法排序了。

我查找了别人的作法,遇到 fkLookup 竟然就直接以那个 KeyField (也就是 Foreign Key) 去排序...这挺不合理的,毕竟 Party.AreaID(也就是 Area.ID) 数字的排序不等同于 Area.Name 文字的排序。
bee2518 2004-11-24
  • 打赏
  • 举报
回复
自己写吧
下面是我写的,针对DbGridEh的,你改一下
procedure GridSort(Column: TColumnEh);
var
DataSet: TDataSet;
begin
if Column.Grid.DataSource=nil then exit;
if Column.Grid.DataSource.DataSet=nil then exit;
if Column.Field.DataSet = nil then Exit ;
DataSet := Column.Field.DataSet;
if DataSet is TCustomADODataSet then
with TCustomADODataSet(DataSet) do
begin
if (Pos(Column.Field.FieldName, Sort) = 1) and (Pos(' DESC', Sort) = 0) then
Sort := Column.Field.FieldName + ' DESC' else
Sort := Column.Field.FieldName + ' ASC';
end;
Column.Grid.OptionsEh := Column.Grid.OptionsEh +[dghAutoSortMarking];
Column.Grid.ColumnDefValues.Title.TitleButton := True;
end;
gxgyj 2004-11-24
  • 打赏
  • 举报
回复
Lookup型好像不能排序吧!
路过........

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧