当然可以,在DBGRID头双击事件中重写SQL

解决方案 »

  1.   

    给你个例子:
    var
       orderindex:Integer=0;//纪录上次排序的字段序号
       orderstyle:sttring='Asc'://排序类型procedure Tfm_order.DBGrid1TitleClick(Column: TColumn);
    begin
      with qryOrder do
      begin
        Close;
        Sql.clear; 
        if OrderIndex<>Column.Index then
        begin
          OrderStyle:='Asc';
          OrderIndex:=Column.Index ;
        end
        else
        begin
          if OrderStyle='Asc' then
            OrderStyle:='Desc'
          else
            OrderStyle:='Asc';
        end;
        sql.add('select * from ...');
        Sql.add(where ....');    
        Sql.Add('Order by '+column.fieldname+' '+OrderStyle);
        PrePare;
        Open;
      end;
    end;
      

  2.   

    你只要改一下sql语句,上述代码通用
      

  3.   

    请在与DBGrid关联的ADOTable或Table中设置它的IndexFieldNames属性为要排序的字段名,可以多个联合使用.
    如果使用Query,就使用查询的ORDER BY子句。
      

  4.   

    和你使用的数据集有关系:
    如果使用ADO类,设置属性Sort=a001,a002......
    如果是TTable,设置属性IndexFieldNames=a001,a002......
    如果是TTQuery,设置SQL中的Order By a001,a002......—————————————————————————————————
    MaximStr := '宠辱不惊,看庭前花开花落,去留无意;
                 毁誉由人,望天上云卷云舒,聚散任风。';
    if Not Assigned(I) then
      I := TI.Create(Nil);
    I.Maxim := MaximStr;
    I.Explain := '假如上述代码中出现“OA”、“3D”等字样,改为“=”或者去掉';
    I.Desire := '加不加分随你';
    —————————————————————————————————
        
      

  5.   

    请问adoquery控件有没有prepare方法?
      

  6.   

    那如果字符很长,岂不是要写很长的代码?例如a001...a999,b001...b999,c...,d.....
    有简单的方法吗?
      

  7.   

    honey_001(小小文) :有必要对所有字段排序吗?一般不超过两个子断。
    —————————————————————————————————
    MaximStr := '宠辱不惊,看庭前花开花落,去留无意;
                 毁誉由人,望天上云卷云舒,聚散任风。';
    if Not Assigned(I) then
      I := TI.Create(Nil);
    I.Maxim := MaximStr;
    I.Explain := '假如上述代码中出现“OA”、“3D”等字样,改为“=”或者去掉';
    I.Desire := '加不加分随你';
    —————————————————————————————————
      

  8.   

    to lxpbuaa(桂枝香在故国晚秋) :
    我的程序是这样的,每个地区用一个英文字母表示,如a,b...
    每个地区的人用001,002...等表示,最后显示所有纪录时先按英文字母排序,再按数字排序,请帮忙,一定给你加分!!!!!
      

  9.   

    你可以这样做:
    adoquery1.close;
    adoquery1.sql.clear;
    adoquery1.sql.add('select * from 数据源');\
    adoquery1.sql.add('ordery by 字段名');//你指定排序字段名
    adoquery1.prepare:=true;
    adoquery1.open;dbgrid.datasource:=adoquery1;
    这样就可以实现了