你可以参照一下以下这张帖子的解决方法:
http://www.csdn.net/expert/topic/341/341908.shtm

解决方案 »

  1.   

    如果你采用ADO,那么这是很简单的:
      ADOTable1.Sort:=DBGrid1.Columns[Column.Index].FieldName;
      

  2.   

    一个通用函数,
    在OnTitleClick事件中调用就可以了
    Procedure OW_OrderADOGrid(Column: TColumn);
    Var
      DataSet: TDataSet;
      FieldNames:String;
    Begin
      if not Column.Field.DataSet.Active then abort;
      if not (Column.Field.FieldKind in [fkData,fkLookup]) then exit;
      DataSet := Column.Field.DataSet;
      if Column.Field.Lookup then
        FieldNames:= Column.Field.KeyFields
      else
        FieldNames:=Column.Field.FieldName;  if DataSet is TCustomADODataSet then
      with TCustomADODataSet(DataSet) do
        begin
          if (Pos(FieldNames, Sort) = 1) and (Pos(' DESC', Sort) = 0) then
          Sort := FieldNames + ' DESC' else
          Sort := FieldNames + ' ASC';
        end;
    end;
      

  3.   

    最蠢但是直接的办法,重新用SQL语句抓取数据