select * from A where fb_01='xyz' order by fb_01 DESC
如果你是用ADO的,那么下面代码绝了,每个字段都可以排,顺排逆排都可以: procedure TForm1.DBGrid1TitleClick(Column: TColumn); var DataSet: TDataSet; begin {点击标题栏,排序} DataSet := Column.Field.DataSet; if not DataSet.Active then exit; if DataSet is TCustomADODataSet then with TCustomADODataSet(DataSet) do begin if (Pos(Column.Field.FieldName, Sort) = 1) and (Pos(' DESC', Sort) = 0) then begin Sort := Column.Field.FieldName + ' DESC'; end else begin Sort := Column.Field.FieldName + ' ASC'; end; end; end;
procedure Tfrm_main.DBGrid1TitleClick(Column: TColumn); var i,row,col:integer; begin //TDrawGrid(dbgrid1).row:=row; //TDrawGrid(dbgrid1).col:=col; col:=DBGrid1.columns[1].Index; if pos('▼',DBGrid1.Columns[col].title.caption)<>0 then DBGrid1.Columns[col].title.caption:=copy(DBGrid1.Columns[col].title.caption,1,length(DBGrid1.Columns[col].title.caption)-2) else if pos('▲',DBGrid1.Columns[col].title.caption)<>0 then DBGrid1.Columns[col].title.caption:=copy(DBGrid1.Columns[col].title.caption,1,length(DBGrid1.Columns[col].title.caption)-2)+'▼' else DBGrid1.Columns[col].title.caption:=DBGrid1.Columns[col].title.caption +'▲'; for i:=0 to DBGrid1.Columns.Count-1 do begin if pos('▼',column.Title.Caption)<>0 then Adoquery1.Sort :=column.fieldname + ' DESC' else if pos('▲',column.Title.Caption)<>0 then Adoquery1.Sort :=column.fieldname + ' ASC' else //这里应怎么写,就是不升序不降序,还原来查询出来的记录顺序. end; end;
Adoquery1.Sort :=column.fieldname + ' ASC' 就行
ali30() ( ) 的代码我运行过,有问题!
procedure TF_HandleShift.SuDBGrid_1TitleClick(Column: TColumn); begin if ADODS_StandardAtt.RecordCount>1 then begin if ADODS_StandardAtt.IndexFieldNames=Column.Field.FieldName then ADODS_StandardAtt.IndexFieldNames:=Column.Field.FieldName+' DESC' else ADODS_StandardAtt.IndexFieldNames:=Column.Field.FieldName; end; end; 你看看我这段代码,也是双击DBGrid得Title,DBGrid的数据集是ADODS_StandardAtt 很好用
procedure TForm1.FormCreate(Sender: TObject); var i:integer; begin cs1.Active:=true; //将dbgrid标识记录为升序 for i:=0 to dbgrid1.Columns.Count-1 do dbgrid1.Columns[i].Title.Caption:=dbgrid1.Columns[i].Title.Caption+'▲'; end;procedure TForm1.DBGrid1TitleClick(Column: TColumn); var bt,sortstr:string; i:integer; begin //记录column标题 bt:=column.Title.Caption; //查找排序标识 if (pos('▲',bt)=0) then column.Title.Caption:=stringreplace(column.Title.Caption,'▼','▲',[rfreplaceall]) else column.Title.Caption:=stringreplace(column.Title.Caption,'▲','▼',[rfreplaceall]); //记录排序条件 for i:=0 to dbgrid1.Columns.Count-1 do begin if sortstr='' then begin if pos('▲',dbgrid1.Columns[i].title.Caption)=0 then sortstr:=dbgrid1.Columns[i].FieldName+' DESC' else sortstr:=dbgrid1.Columns[i].FieldName+' ASC'; end else begin if pos('▲',dbgrid1.Columns[i].title.Caption)=0 then sortstr:=sortstr+','+dbgrid1.Columns[i].FieldName+' DESC' else sortstr:=sortstr+','+dbgrid1.Columns[i].FieldName+' ASC'; end end; //排序 cs1.sort:=sortstr; end; //在delphi 7下调试能过
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
var
DataSet: TDataSet;
begin
{点击标题栏,排序} DataSet := Column.Field.DataSet;
if not DataSet.Active then exit; if DataSet is TCustomADODataSet then
with TCustomADODataSet(DataSet) do
begin
if (Pos(Column.Field.FieldName, Sort) = 1) and (Pos(' DESC', Sort) = 0) then
begin
Sort := Column.Field.FieldName + ' DESC';
end
else
begin
Sort := Column.Field.FieldName + ' ASC';
end;
end;
end;
var
i,row,col:integer;
begin
//TDrawGrid(dbgrid1).row:=row;
//TDrawGrid(dbgrid1).col:=col;
col:=DBGrid1.columns[1].Index; if pos('▼',DBGrid1.Columns[col].title.caption)<>0 then
DBGrid1.Columns[col].title.caption:=copy(DBGrid1.Columns[col].title.caption,1,length(DBGrid1.Columns[col].title.caption)-2)
else
if pos('▲',DBGrid1.Columns[col].title.caption)<>0 then
DBGrid1.Columns[col].title.caption:=copy(DBGrid1.Columns[col].title.caption,1,length(DBGrid1.Columns[col].title.caption)-2)+'▼'
else
DBGrid1.Columns[col].title.caption:=DBGrid1.Columns[col].title.caption +'▲';
for i:=0 to DBGrid1.Columns.Count-1 do
begin
if pos('▼',column.Title.Caption)<>0 then
Adoquery1.Sort :=column.fieldname + ' DESC'
else
if pos('▲',column.Title.Caption)<>0 then
Adoquery1.Sort :=column.fieldname + ' ASC'
else
//这里应怎么写,就是不升序不降序,还原来查询出来的记录顺序.
end;
end;
就行
begin
if ADODS_StandardAtt.RecordCount>1 then
begin
if ADODS_StandardAtt.IndexFieldNames=Column.Field.FieldName then
ADODS_StandardAtt.IndexFieldNames:=Column.Field.FieldName+' DESC'
else
ADODS_StandardAtt.IndexFieldNames:=Column.Field.FieldName;
end;
end;
你看看我这段代码,也是双击DBGrid得Title,DBGrid的数据集是ADODS_StandardAtt
很好用
var
i:integer;
begin
cs1.Active:=true;
//将dbgrid标识记录为升序
for i:=0 to dbgrid1.Columns.Count-1 do
dbgrid1.Columns[i].Title.Caption:=dbgrid1.Columns[i].Title.Caption+'▲';
end;procedure TForm1.DBGrid1TitleClick(Column: TColumn);
var
bt,sortstr:string;
i:integer;
begin
//记录column标题
bt:=column.Title.Caption;
//查找排序标识
if (pos('▲',bt)=0) then
column.Title.Caption:=stringreplace(column.Title.Caption,'▼','▲',[rfreplaceall])
else
column.Title.Caption:=stringreplace(column.Title.Caption,'▲','▼',[rfreplaceall]);
//记录排序条件
for i:=0 to dbgrid1.Columns.Count-1 do
begin
if sortstr='' then
begin
if pos('▲',dbgrid1.Columns[i].title.Caption)=0 then
sortstr:=dbgrid1.Columns[i].FieldName+' DESC'
else
sortstr:=dbgrid1.Columns[i].FieldName+' ASC';
end
else
begin
if pos('▲',dbgrid1.Columns[i].title.Caption)=0 then
sortstr:=sortstr+','+dbgrid1.Columns[i].FieldName+' DESC'
else
sortstr:=sortstr+','+dbgrid1.Columns[i].FieldName+' ASC';
end
end;
//排序
cs1.sort:=sortstr;
end;
//在delphi 7下调试能过