自己写啊
在ONCELLCLICK里面家事件啊

解决方案 »

  1.   

    自己写啊
    在ONCELLCLICK里面家事件啊
      

  2.   

    dev express 的dxdbgrid 可以!
    轻松搞定!
      

  3.   

    DBGrid1Boolean: boolean; //全局变量
    ADOTable1: TADOTable;procedure TForm1MainMenu.DBGrid1TitleClick(Column: TColumn);
    begin
      with ADOTable1 do  
      begin
        if DBGrid1Boolean then
          TADOTable(ADOTable1).Sort := Column.FieldName + ' DESC'
        else
          TADOTable(ADOTable1).Sort := Column.FieldName;
        DBGrid1Boolean := not(DBGrid1Boolean);
      end;
    end;
      

  4.   

    在ONCELLCLICK自己编写修改SQL的代码,加上Order By子句就可以了,我就这么用的。
    不过加上Order By子句后,结果集不可编辑(修改)
      

  5.   

    定义一个全局变量
    var blOrder :Boolean = False;
    procedure TForm1.DBGrid1TitleClick(Column: TColumn);
    var Sql:String;
        sOrder :String; 
    begin
      if blOrder then
      begin
        sOrder := 'DESC';
        blOrder := False;
      end
      else
      begin
        sOrder := '';
        blOrder := True;
      end;
      Sql := 'SELECT * FROM Table ORDER BY '+
            Column.FieldName +' '+sOrder;
    end;
      

  6.   

    simonvc(所罗门) 的方法是最好的,因为这个排序动作是在客户计算机进行的,避免了服务器资源被无端的浪费!
      

  7.   

    1.采用TSortGrid、Devexpress的quantumgrid等第三方控件
    2.对于AdoDataset,直接用Sort属性排序即可。
    3.对于Query,可以用以下程序:
    procedure TFHkdata.SortQuery(Column:TColumn);
    var
      SqlStr,myFieldName,TempStr: string;
      OrderPos: integer;
      SavedParams: TParams;
    begin
      if not (Column.Field.FieldKind in [fkData,fkLookup]) then exit;
      if Column.Field.FieldKind =fkData then
        myFieldName := UpperCase(Column.Field.FieldName)
      else
        myFieldName := UpperCase(Column.Field.KeyFields);
      while Pos(myFieldName,';')<>0 do
        myFieldName := copy(myFieldName,1,Pos(myFieldName,';')-1)
                      + ',' + copy(myFieldName,Pos(myFieldName,';')+1,100);
      with TQuery(TDBGrid(Column.Grid).DataSource.DataSet) do
      begin
        SqlStr := UpperCase(Sql.Text);
    //  if pos(myFieldName,SqlStr)=0 then exit;
        if ParamCount>0 then
        begin
          SavedParams := TParams.Create;
          SavedParams.Assign(Params);
        end;
        OrderPos := pos('ORDER',SqlStr);
        if (OrderPos=0) or
          (pos(myFieldName,copy(SqlStr,OrderPos,100))=0) then
          TempStr := ' Order By ' + myFieldName + ' Asc'
        else if pos('ASC',SqlStr)=0 then
          TempStr := ' Order By ' + myFieldName + ' Asc'
        else
          TempStr := ' Order By ' + myFieldName + ' Desc';
        if OrderPos<>0 then SqlStr := Copy(SqlStr,1,OrderPos-1);
        SqlStr := SqlStr + TempStr;
        Active := False;
        Sql.Clear;
        Sql.Text := SqlStr;
        if ParamCount>0 then
        begin
          Params.AssignValues(SavedParams);
          SavedParams.Free;
        end;
        Prepare;
        Open;
      end;
    end;
      

  8.   

    dev  express  的dxdbgrid  可以!
      轻松搞定!最好的了,看源码还可以学习很多东西!!