var sortfield:string; procedure TForm1.DBGrid1TitleClick(Column: TColumn); begin if SortFieldName=Column.FieldName then begin Query.Sort:=SortFieldName+' DESC'; SortFieldName:=''; end else begin Query.Sort:=Column.FieldName+' ASC'; SortFieldName:=Column.FieldName; end; end; 可以实现升降序间或进行
不知道用SQL可以解决问题么?代码 adoquery1.close; adoquery1.sql.clear; adoquery1.sql.add('Select * from table(表名) order by field(字段名)'); adoquery1.open 不知这样行不行,我没有测试过!呵呵,我也是刚刚学Delphi! 路过!
It's quite easy to do this. I have a TQuery, TDatasource and TDbGrid on a form, linked together.QuerySQL is a global string that holds the SQL-statement.begin QuerySQL := 'SELECT * FROM Customer.DB'; Query1.SQL.Add(QuerySQL); Query1.Open; end; In the DBGrid event OnTitleClick, we just add an ORDER-BY clause to the sql and refresh the query.procedure TForm1.DBGrid1TitleClick(Column: TColumn); begin witzh Query1 do begin DisableControls; Close; SQL.Clear; SQL.Add(QuerySQL); SQL.Add('ORDER BY ' + Column.FieldName); Open; // Restore the title settings, otherwise everything // will be blue after a while DBGrid1.Columns.RestoreDefaults; Column.Title.Font.Color := clBlue; EnableControls; end; end;
建議你用ADOquery﹐使用相當便的(類似query)。 procedure TForm1.DBGrid1TitleClick(Column: TColumn); var fieldname:string; begin with adoquery1 do begin FieldName:=column.FieldName; if Sort=FieldName+' ASC' then Sort:=FieldName+' DESC' else Sort:=AFieldName+' ASC'; end; end;
首先在Private定义变量 FlagSort :Boolean; FieldSort :String; 接着在窗体FormShow事件初始化: FlagSort :=False; FieldSort :=''; 然后再下面事件: procedure TForm1.DBGrid1TitleClick(Column: TColumn); begin FlagSort :=Not FlagSort ;//升降序交换,不能设未局部变量。 FieldSort :=Column.FieldName; //查询语句 with adoquery1 do begin Close; Sql.Clear; Sql.Add('select * from Table1 where 条件'); if FieldSort<>'' then //排序字段不能为空 if FlagSort then//真:升序 Sql.Add('order by '+FieldSort+' asc ') else//假:降序 Sql.Add('order by '+FieldSort+' desc ') Open; end; end;
sortfield:string;
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
begin
if SortFieldName=Column.FieldName then
begin
Query.Sort:=SortFieldName+' DESC';
SortFieldName:='';
end
else
begin
Query.Sort:=Column.FieldName+' ASC';
SortFieldName:=Column.FieldName;
end;
end;
可以实现升降序间或进行
adoquery1.close;
adoquery1.sql.clear;
adoquery1.sql.add('Select * from table(表名) order by field(字段名)');
adoquery1.open
不知这样行不行,我没有测试过!呵呵,我也是刚刚学Delphi!
路过!
I have a TQuery, TDatasource and TDbGrid on a form, linked together.QuerySQL is a global string that holds the SQL-statement.begin
QuerySQL := 'SELECT * FROM Customer.DB';
Query1.SQL.Add(QuerySQL);
Query1.Open;
end;
In the DBGrid event OnTitleClick, we just add an ORDER-BY clause to the sql and refresh the query.procedure TForm1.DBGrid1TitleClick(Column: TColumn);
begin
witzh Query1 do
begin
DisableControls;
Close;
SQL.Clear;
SQL.Add(QuerySQL);
SQL.Add('ORDER BY ' + Column.FieldName);
Open;
// Restore the title settings, otherwise everything
// will be blue after a while
DBGrid1.Columns.RestoreDefaults;
Column.Title.Font.Color := clBlue;
EnableControls;
end;
end;
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
var fieldname:string;
begin
with adoquery1 do
begin
FieldName:=column.FieldName;
if Sort=FieldName+' ASC' then
Sort:=FieldName+' DESC'
else
Sort:=AFieldName+' ASC';
end;
end;
另注Danphel(Aleon)仁兄用的是什么控件,请告知!
那他骗骗老板都成啊,我倒了!
ftp://202.117.210.28/file/ehlib3.rar
FlagSort :Boolean;
FieldSort :String;
接着在窗体FormShow事件初始化:
FlagSort :=False;
FieldSort :='';
然后再下面事件:
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
begin
FlagSort :=Not FlagSort ;//升降序交换,不能设未局部变量。
FieldSort :=Column.FieldName;
//查询语句
with adoquery1 do
begin
Close;
Sql.Clear;
Sql.Add('select * from Table1 where 条件');
if FieldSort<>'' then //排序字段不能为空
if FlagSort then//真:升序
Sql.Add('order by '+FieldSort+' asc ')
else//假:降序
Sql.Add('order by '+FieldSort+' desc ')
Open; end;
end;