两种方式可以实现:
第一种修改ADOQuery的SQL语句,在数据库关键字加’ASC‘或‘DESC'属性,order by 关键字。部分代码如下:
ZSQL:= ADOQuery1.SQL.Text;
Fname :=Column.FieldName;
Fcaption :=Column.Title;
if pos('△',Fname)>1 then
begin
Tempstr := StringReplace(Fname, '△', '▽', [rfReplaceAll]);
FieldName:=Tempstr;
NewSQL:=StringReplace(ZSQL,'['+Fname+']','['+Tempstr+']', [rfReplaceAll]);
NewSQL:=StringReplace(NewSQL,';','DESC;', [rfReplaceAll]);
end
else if pos('▽',Fname)>1 then
begin
Tempstr := StringReplace(Fname, '▽', '△', [rfReplaceAll]);
FieldName:=Tempstr;
NewSQL:=StringReplace(ZSQL,'['+Fname+']','['+Tempstr+']', [rfReplaceAll]);
NewSQL:=StringReplace(NewSQL,'DESC;',';', [rfReplaceAll]);
end
else
begin
//if Fname='设备类别' then Fname:='设备类别名称';
FieldName:=Fname+'△';
Tempstr :='['+Fname+'] As ['+Fname+'△]';
TempSQL:=
NewSQL:=StringReplace(TempSQL,'['+Fname+']',Tempstr, [rfReplaceAll]);
if pos('设备类别名称',Fname)>=1 then Fname:='设备类别';
NewSQL:=NewSQL+' order by '+Fname+' ;';
end;
第二种方式 通过ADOQuery或其它数据集组件的Sort属性 配合DBGrid的OnTitleClick事件 部分代码如下:
procedure THistoyEquipForm.DBGrid1TitleClick(Column: TColumn);
var
mFieldTittle:string;
mFieldName:string;
begin
mFieldName := Column.FieldName;
mFieldTittle := StringReplace(Column.Title.Caption,'△','',[rfReplaceAll]);
mFieldTittle := StringReplace(mFieldTittle,'▽','',[rfReplaceAll]);
if NextColumn <> nil then
begin
NextColumn.Title.Caption := NextColumnTittle;
end;
if ADOQuery1.Sort <> mFieldName+' ASC' then
begin
ADOQuery1.Sort := mFieldName+' ASC';
Column.Title.Caption := mFieldTittle +'△';
end
else begin
ADOQuery1.Sort := mFieldName+' DESC';
Column.Title.Caption := mFieldTittle +'▽';
end;
DBGrid1.Refresh;
NextColumn := Column;
NextColumnTittle := mFieldTittle;
end;