何必那么麻烦、试试这个:
在datamodal下写:
procedure TForm_DM.DataSetAsc(aDataSet: TADODataSet; aAscString: string);
begin
aDataSet.Sort := aAscString + ' ASC';
end;procedure TForm_DM.DataSetDesc(aDataSet: TADODataSet; aDescString: string);
begin
aDataSet.Sort := aDescString + ' DESC';
end;
然后在有DBGRID的Form下写
uses datamodal;
升序。//降序使用同理。
procedure TBggl_form.ActDataSetAscExecute(Sender: TObject);
var
DBgridAsc: string;
begin
with Form_datamodal do
begin
DBgridAsc := DBGridMain.SelectedField.FieldName;
DataSetAsc(ADODataset, DBgridAsc);
end;
end;
在datamodal下写:
procedure TForm_DM.DataSetAsc(aDataSet: TADODataSet; aAscString: string);
begin
aDataSet.Sort := aAscString + ' ASC';
end;procedure TForm_DM.DataSetDesc(aDataSet: TADODataSet; aDescString: string);
begin
aDataSet.Sort := aDescString + ' DESC';
end;
然后在有DBGRID的Form下写
uses datamodal;
升序。//降序使用同理。
procedure TBggl_form.ActDataSetAscExecute(Sender: TObject);
var
DBgridAsc: string;
begin
with Form_datamodal do
begin
DBgridAsc := DBGridMain.SelectedField.FieldName;
DataSetAsc(ADODataset, DBgridAsc);
end;
end;
注意:如果是lookup形的字段排序时只能按foreign key 排序。所以如果DBGridpro.selectedfield.Fieldname为lookup形的字段那就让排序按钮的enabled:=false(估计你的程序用不到。)
adodataset的sort属性就是专门用于排序的,详情F1
uses adodb;
procedure TFormgrid.SpascClick(Sender: TObject);
var
fn: string;
begin
fn := DBGridpro.selectedfield.Fieldname;
ADODataset1.sort := fn + ' ASC';
end;
procedure TFormgrid.SpdescClick(Sender: TObject);
var
fn1: string;
begin
fn1 := DBGridpro.selectedfield.fieldname;
ADODataset.sort := fn1 + ' DESC';
end;
把他用在你的程序中然后试试。