想实现通过分别点击dbgrid控件中的字段标题栏,而实现此字段的排序。
我现所知道的就是可在ontitleclick中编写代码,但不知从何下手!
(此dbGRid显示的记录是通过query控件动态生成的)。
解决立刻加分!

解决方案 »

  1.   

    var
      sortfield:string;
    procedure TForm1.DBGrid1TitleClick(Column: TColumn);
    begin
      if SortFieldName=Column.FieldName then
      begin
        Query.Sort:=SortFieldName+' DESC';
        SortFieldName:='';
      end
      else
      begin
        Query.Sort:=Column.FieldName+' ASC';
        SortFieldName:=Column.FieldName;
      end;
    end;
    可以实现升降序间或进行
      

  2.   

    不知道用SQL可以解决问题么?代码
    adoquery1.close;
    adoquery1.sql.clear;
    adoquery1.sql.add('Select * from table(表名) order by field(字段名)');
    adoquery1.open
    不知这样行不行,我没有测试过!呵呵,我也是刚刚学Delphi!
    路过!
      

  3.   

    用TQuery组件不可以单击标题来排序,只有TADOQuery,TClientDataSet才可以排序
      

  4.   

    It's quite easy to do this.
    I have a TQuery, TDatasource and TDbGrid on a form, linked together.QuerySQL is a global string that holds the SQL-statement.begin
      QuerySQL := 'SELECT * FROM Customer.DB';
      Query1.SQL.Add(QuerySQL);
      Query1.Open;
    end;
    In the DBGrid event OnTitleClick, we just add an ORDER-BY clause to the sql and refresh the query.procedure TForm1.DBGrid1TitleClick(Column: TColumn);
    begin
      witzh Query1 do
      begin
        DisableControls;
        Close;
        SQL.Clear;
        SQL.Add(QuerySQL);
        SQL.Add('ORDER BY ' + Column.FieldName);
        Open;
        // Restore the title settings, otherwise everything
        // will be blue after a while
        DBGrid1.Columns.RestoreDefaults;
        Column.Title.Font.Color := clBlue;
        EnableControls;
      end;
    end;
      

  5.   

    建議你用ADOquery﹐使用相當便的(類似query)。
    procedure TForm1.DBGrid1TitleClick(Column: TColumn);
    var fieldname:string;
    begin
      with adoquery1 do
      begin
        FieldName:=column.FieldName;
        if Sort=FieldName+' ASC' then
           Sort:=FieldName+' DESC'
        else
           Sort:=AFieldName+' ASC';
      end;
    end;
      

  6.   

    天啊,我的程序已经到了测试阶段,只是客户临时有这需求,我不能因为这个,我要改80%的程序代码那,能不能在不将Tquery改成adoquery的前提下,实现功能啊。
    另注Danphel(Aleon)仁兄用的是什么控件,请告知!
    那他骗骗老板都成啊,我倒了!
      

  7.   

    那你就下載一個ehlib吧。給一個下載地址給你吧﹕
    ftp://202.117.210.28/file/ehlib3.rar
      

  8.   

    首先在Private定义变量
    FlagSort :Boolean;
    FieldSort :String;
    接着在窗体FormShow事件初始化:
    FlagSort :=False;
    FieldSort :='';
    然后再下面事件:
    procedure TForm1.DBGrid1TitleClick(Column: TColumn);
    begin
    FlagSort :=Not FlagSort ;//升降序交换,不能设未局部变量。
    FieldSort :=Column.FieldName;
    //查询语句
      with adoquery1 do
      begin
        Close;
        Sql.Clear;
        Sql.Add('select * from Table1 where 条件');
       if FieldSort<>'' then //排序字段不能为空
       if FlagSort then//真:升序
         Sql.Add('order by '+FieldSort+' asc ')
       else//假:降序
         Sql.Add('order by '+FieldSort+' desc ')
       Open;  end;
    end;