query.close
query.sql.add(' order by Sort =:Sort');
query.params.parambyname('sort') := cloumn.fieldname
query.open

解决方案 »

  1.   

    Dbgrid1.DataSource.DataSet.sort:=Column.FieldName+' ASC';
      

  2.   

    Procedure OW_OrderADOGrid(Column: TColumn);
    Var
      DataSet: TDataSet;
      FieldNames:String;
    Begin
      if Column.Field=nil then Exit;
      if not Column.Field.DataSet.Active then Exit;
      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;
    procedure TFSearchParent.myDBGridTitleClick(Column: TColumn);
    begin//排序——DBGRID的TitleClick事件
      OW_OrderADOGrid(Column);
    end;只能用于ADO连接!
      

  3.   

    其中adoquery1是dbgrid的datasource
    procedure TMDIChild.DBGrid1TitleButtonClick(Sender: TObject;
      AFieldName: String);
    begin
            with datam1 do
            begin
                    adoquery1.DisableControls;//提高运行速度
                    ADOQuery1.Close;  //清除查询内容
                    ADOQuery1.SQL.clear;
                    adoquery1.Parameters.Clear;
                    //添加查询语句
                    ADOQuery1.SQL.Add('select * from enterprise a');
                    adoquery1.SQL.Add ('order by '+ afieldname);
            end;
            try
                    datam1.ADOQuery1.Open;//打开
                    datam1.adoquery1.EnableControls;//启动
                    datam1.adoquery1.First;
            except
                    //例外处理
                    datam1.adoquery1.Close;
                    datam1.adoquery1.EnableControls;
            end;
    end;