如何对clientdataset中的数据进行排序?

lzf913 2002-11-09 03:27:39
下面的代码实现了升序的排序,但如何实现降序呢?
procedure Tmoduleform.DBGrid1TitleClick(Column: TColumn);
begin
if clientdataset1.IsEmpty then
exit;
clientdataset1.IndexFieldNames:=column.FieldName;
end;

在ADO中有个sort可以实现。现在是clientdataset,我就不知道如何实现了,请各位大侠指教。
...全文
527 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lzf913 2002-11-11
  • 打赏
  • 举报
回复
suny_2001(小鱼儿):addindex的第五个参数是integer型的,不过现在问题已经解决了,谢谢各位的帮助。结帐!!
procedure Tmoduleform.DBGrid1TitleClick(Column: TColumn);
begin
if clientdataset1.IsEmpty then
exit;
clientdataset1.DisableControls;
if indexname='降序' then //按升序排列
begin
if clientdataset1.IndexName='Indexname' then
clientdataset1.DeleteIndex('Indexname');
clientdataset1.AddIndex('Indexname',column.FieldName,[],column.FieldName,'',0);
ClientDataSet1.IndexName:='Indexname';
indexname:='升序';
end
else //按降序排列
begin
if clientdataset1.IndexName='Indexname' then
clientdataset1.DeleteIndex('Indexname');
clientdataset1.AddIndex('Indexname',column.FieldName,[],'','',0);
ClientDataSet1.IndexName:='Indexname';
indexname:='降序';
end;
clientdataset1.EnableControls;
end;
suny_2001 2002-11-11
  • 打赏
  • 举报
回复

fieldstr:='field3;field1;field2' ;
descstr:='field3;field2';ascstr:='field1';
if clientdataset.IndexName='Index1' then
ClientDataSet.DeleteIndex('Index1');
ClientDataSet.AddIndex('Index1', fieldstr, [], descstr, ascstr);
ClientDataSet.IndexName := 'Index1';

这样的排序结果是先按field3,field2先降序排列,然后在是FIELD1升序
lzf913 2002-11-09
  • 打赏
  • 举报
回复
楼上的兄弟啊,现在要求的是在clientdataset中排序,用SQL语句不是要重新查询吗?效率不好吧
loader 2002-11-09
  • 打赏
  • 举报
回复
用sql语句???

不知道行不行
blueshu 2002-11-09
  • 打赏
  • 举报
回复
转贴
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
var
i:integer;
begin
if column.Title.Color<>clyellow then
begin
Column.Title.Color:=clYellow;
Memo1.Lines.Add(Column.Field.FieldName);//加一个memo,让它不可见
end
else begin
for i:=0 to memo1.Lines.Count-1 do
if memo1.Lines.Strings[i]=Column.Field.FieldName then
memo1.Lines.Delete(i);
Column.Title.Color:=clsilver;
end;
end;


再放一个按钮,用来点击排序
procedure TForm1.ToolButton12Click(Sender: TObject);
var clo:string;
i:integer;
begin
if Memo1.Lines.Count=0 then exit;
clo:='';
for i:=0 to Memo1.Lines.Count-1 do
clo:=clo+Memo1.Lines.Strings[i]+';';
clo:=copy(clo,1,length(clo)-1);
dm1.qlb.IndexFieldNames:=clo;
dm1.qlb.First;
memo1.Clear;
for i:=0 to dbgrid1.Columns.Count-1 do
dbgrid1.Columns[i].Title.Color :=clSilver;
end;
lzf913 2002-11-09
  • 打赏
  • 举报
回复
这样可以实现降序吗?试过好象不行吧,你试过没有?
blueshu 2002-11-09
  • 打赏
  • 举报
回复
ClientDataSet.AddIndex('Indexname', 'field1;field2',[], '','',0);
ClientDataSet.IndexName:='Indexname';

5,388

社区成员

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

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