何必那么麻烦、试试这个:
在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;

解决方案 »

  1.   

    这是什么事件DataSetAsc? 没有用DataModul
      

  2.   

    sql语句不对当然不行,如果没有where 语句,可以使用 where 1=1 代替啊,反正达到目的就可以了
      

  3.   

    to PLWang(菜鸟) :那就这么写吧。
    注意:如果是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; 
    把他用在你的程序中然后试试。