我记得以前看过,但现在一时找不出来,急用,请各位大侠仗义出手相助!

解决方案 »

  1.   

    第三方控件
    www.51delphi.com 上面有个 DevExpress QuantumGrid 4.5
      

  2.   

    procedure TForm1.DBGrid1TitleClick(Column: TColumn);
    begin
      //在这写代码进行排序
    end;
      

  3.   

    procedure TForm1.DBGrid1CellClick(Column: TColumn);
    begin
    adoquery1.filtered :=true ;
    adoquery1.Sort:=dbgrid1.selectedfield.FieldName;
    end;
      

  4.   

    procedure TForm1.DBGrid1TitleClick(Column: TColumn);
    begin
      //在这写代码进行排序
    end;就是重新把sql语句写一次吗?但是column那么多不可能一个个写吧?具体应该怎么写?
      

  5.   

    Procedure TForm1.DBGrid1TitleClick(Column: TColumn);
    Begin
      ADOQuery1.Sort := Column.FieldName;
      ADOquery1.Filtered := True;
    End;
      

  6.   

    最近写的 仅供参考 :
    procedure Tform1.SortQuery(column:TColumn);
    var
      SqlStr,myFieldName,TempStr: string;
      OrderPos: integer;
      SavedParams: TParams;
    begin
      if not(Column.Field.FieldKind in [fklookup,fkdata]) 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 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;
      

  7.   

    procedure TForm1.DBGrid1TitleClick(Column: TColumn);
    begin
     with ADOQuery1 do
     begin
       Close;
       SQL.Clear;
       SQL.Add('select * from yourtable obder by :sortfieldname');
       Parameters.ParamByName('sortfieldname').Value := Column.FieldName;
       Open;
     end;
    end;
      

  8.   

    Procedure TForm1.DBGrid1TitleClick(Column: TColumn);
    Begin
      ADOQuery1.Sort := Column.FieldName;
      ADOquery1.Filtered := True;
    End;只适用于ADO
      

  9.   

    我不是用ado的,各位大侠的例程好像用不上,小弟不才,改了几次都不行,我是这个dbgrid用datamodule1.query4的,具体应该怎么改?
      

  10.   

    procedure TForm1.DBGrid1TitleClick(Column: TColumn);
    begin
     with Query4 do
     begin
       Close;
       SQL.Clear;
       SQL.Add('select * from yourtable obder by :sortfieldname');
       Parameters.ParamByName('sortfieldname').Value := Column.FieldName;
       Open;
     end;
    end;这样就行!
      

  11.   

    procedure TForm1.DBGrid1TitleClick(Column: TColumn);
    begin
       with query1 do
          begin        
            close;
            sql.Clear;
            sql.Add('select * from 表名 order by :orderlaber');
            parambyname('orderlaber').value:=‘列名’;
            open;
          end;
    end;
      

  12.   

    procedure TForm1.DBGrid1CellClick(Column: TColumn);
    begin
    adoquery1.filtered :=true ;
    adoquery1.Sort:=dbgrid1.selectedfield.FieldName;
    end;这样只能进行单击一次进行升序,要是想再单击一次进行降序,再单击一次又是升序。以此类推,该怎么解决呢?
      

  13.   

    procedure TFormMain.DBGrid1TitleClick(Column: TColumn);
    begin
      with Table1 do
      begin
        IndexFieldNames:=Column.FieldName;
      end;
    end;即可实现任何列的排序