一个DBGIRD中点击标题就按所按标题排序.用的是Adoquery.请问如何实现.

解决方案 »

  1.   

    //try
    function DBGridSort(mColumn: TColumn): Boolean;
    const
      cSortSQL: array[Boolean] of string = ('DESC', 'ASC');
    var
      vBook: string;
    begin
      Result := False;
      if (not Assigned(mColumn)) or (not Assigned(mColumn.Field)) then Exit;
      if not (mColumn.Field.DataType in [ftString, ftSmallint, ftInteger, ftWord,
        ftBoolean, ftFloat, ftCurrency, ftBCD, ftDate, ftTime, ftDateTime,
        ftBytes, ftVarBytes, ftAutoInc, ftFixedChar, ftWideString,
        ftLargeint, ftGuid, ftTimeStamp, ftFMTBcd]) then Exit;
      vBook := mColumn.Field.DataSet.Book;
      try
        mColumn.Field.DataSet.DisableControls;
        with TADODataSet(mColumn.Field.DataSet) do
          Sort := Format('%s %s', [mColumn.Field.FieldName,
            cSortSQL[(Pos(#32 + mColumn.Field.FieldName + #32, #32 + Sort) <> 1) or
              (not (Pos(#32 + cSortSQL[True], Sort) > 0))]]);
      finally
        mColumn.Field.DataSet.Book := vBook;
        mColumn.Field.DataSet.EnableControls;
      end;
      Result := True;
    end; { DBGridSort }procedure TForm1.DBGrid1TitleClick(Column: TColumn);
    begin
      DBGridSort(Column);
    end;
      

  2.   

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

  3.   

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

  4.   

    先声明一个AscOrDesc :Boolean;
    可以在DBGRID的onTitleBtnClick事件中
    procedure TFormDev.DBGridTitleBtnClick(Sender: TObject;
      ACol: Integer; Column: TColumnEh);
    begin
      AscOrDesc := not AscOrDesc;
      if AscOrDesc then
      begin
        ADODSDev.Sort := Column.FieldName + ' ASC'; //升序
      end
      else
      begin
        ADODSDev.Sort := Column.FieldName + ' DESC'; //降序
      end;
    end;
      

  5.   

    zswangII(伴水清清)(职业清洁工) 的不错.
      

  6.   

    zswangII(伴水清清)(职业清洁工),如果fkData时正确,如fkLookup或fkCalcuted时不行。
      

  7.   

    ADOQuery1.Sort := Column.FieldName;
      ADOquery1.Filtered := True;
    ok