dbgrid记录排序问题。(40分)

flashwolf 2001-10-26 04:35:25
目的:在DBGRID里,点一下某个表头就按这个字段排序(从小到大),再点一下就倒排序(从大到小)。

现在我所用到的是Tclientdataset,Twwdbgrid及tdatasource.
目前从小到大排序可以实现了。代码如下:
procedure Tfrma1.gppm_DBGrid1TitleButtonClick(Sender: TObject;
AFieldName: string);
begin
gppm_clientdataset1.IndexFieldNames := afieldname;
gppm_DBGrid1.RefreshDisplay;
end;

但是倒排(从大到小)怎么搞定?
...全文
184 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
flashwolf 2001-10-31
  • 打赏
  • 举报
回复
做完了,我的代码如下:谢谢cobi(小新国际)!分数给你。

procedure Tfrma1.gppm_DBGrid1CalcTitleImage(Sender: TObject; Field: TField;
var TitleImageAttributes: TwwTitleImageAttributes);
begin

if Field = gppm_clientdataset1.FieldByName(fieldchoose) then
TitleImageAttributes.imageIndex := imageorder
else
TitleImageAttributes.imageIndex := -1;
end;

procedure Tfrma1.gppm_DBGrid1TitleButtonClick(Sender: TObject;
AFieldName: string);
begin
fieldchoose := afieldname;
record_index(gppm_ClientDataSet1, afieldname);
if gppm_clientdataset1.IndexName = gppm_clientdataset1.IndexDefs[1].Name then
begin
gppm_clientdataset1.IndexName := gppm_clientdataset1.IndexDefs[0].Name;
imageorder := 0;
end else
begin
gppm_clientdataset1.IndexName := gppm_clientdataset1.IndexDefs[1].Name;
imageorder := 1;
end;
end;

procedure record_index(clientdataset1: TClientDataset; IndexField: string);
begin
with clientdataset1 do
with IndexDefs do begin
Clear;
with AddIndexDef do begin
Name := IndexField;
Fields := IndexField;
end;
with AddIndexDef do begin
Name := IndexField + '_down';
Fields := IndexField;
Options := [ixDescending];
end;
end;
end;
nancy_song 2001-10-26
  • 打赏
  • 举报
回复
你好!caoyq
请把你的想法具体写成代码,让我们借鉴一下,你不会这么吝啬吧!谢谢!
flashwolf 2001-10-26
  • 打赏
  • 举报
回复
感觉cobi(小新国际)办法跟我的想法有点对路,我试试 
caoyq 2001-10-26
  • 打赏
  • 举报
回复
真是的!让我怎么说你……
你创建两个索引!CREATE INDEX……
一个用ASC参数,二个用DESC参数。
点击一下调用第一个,再点击一下调用第二个。
cobi 2001-10-26
  • 打赏
  • 举报
回复
查看了clientdataset的属性,其中在indexdefs中新建一个indexdefs后,可以对options中的一个ixdescending属性进行设置,默认是fasle,即由小到大,那么在程序中控制其为true应该可以实现由大到小
flashwolf 2001-10-26
  • 打赏
  • 举报
回复
楼上的朋友:这我清楚,用SQL当然什么事都能搞定,问题是还不够直接。我的上面就用到3个东西:Tclientdataset,Twwdbgrid及tdatasource.能不能直接搞定?
cobi 2001-10-26
  • 打赏
  • 举报
回复
你用的infopower控件中能否设定排序的方向性呢?如果可以,在你原来的代码里加上就可以了。
如果没有,我想还是通过sql语句排序比较好,语句就象caoyq(草民呆瓜)的那样。
但是你的要求中点一下就顺序,再点一下就逆序,这个必须用一个全局变量做标记才可以,否则你的事件里是没有办法知道你到底想赶什么的
flashwolf 2001-10-26
  • 打赏
  • 举报
回复
caoyq(草民呆瓜)朋友 :nono.不是这个意思,不用SQL的,那样的话还要再重新检索一下数据库,你看看我上面的代码。直接gppm_clientdataset1.IndexFieldNames := afieldname
然后再刷新显示,只是倒排不行:(
lovewangj 2001-10-26
  • 打赏
  • 举报
回复
up
yxjjx 2001-10-26
  • 打赏
  • 举报
回复
你自己编代码在SQL语句中按升或降排序。
flashwolf 2001-10-26
  • 打赏
  • 举报
回复
补充一下:我的dbgrid 用的是infopower的控件,
gzmhero 2001-10-26
  • 打赏
  • 举报
回复
建议你换个控件,排序方便多了。
caoyq 2001-10-26
  • 打赏
  • 举报
回复
顺序:select * from table_name where …… order by field1 desc
逆序:select * from table_name where …… order by field1 asc
呵呵!不知道是不是这个意思。

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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