up

解决方案 »

  1.   

    dx系列的可以,在www.playicq.com上有下载
      

  2.   

    dxdbgrid
    有必要吗?
    你写sql 语句排序不就得了
      

  3.   

    procedure TFrmClient_G.DBGrid1TitleClick(Column: TColumn);
     var sfield:string;
    begin
      sfield:=column.FieldName;
      dataset.Sort:=sfield + ' ASC' ;
    end;
      

  4.   

    没有必要把,
    完全可以在DBGRrid.ontitleclick事件中实现
    先设置全局变量
    Private
       Flag_sort :boolean;//升序或降序
       Field_sort :string;//要排序的字段
     在窗体的Formshow事件初始化
      Flag_sort :=false;
      Field_sort :='';
    再DBGrid.ontitleclick事件
    写下:
     Flag_sort :=Not Flag_sort;
     Field_sort :=Column.FieldName;
     Action_search.execute;//查询语句自己可以写调用Flag_sort 和Field_sort
      

  5.   

    实际上DBGrid只是原原本本的显示数据集中的数据,数据在数据集中怎么排序,DBGrid就怎么排序。所以,要解决DBGrid的排序问题,其实就是解决数据集的排序问题。
    1:TClientDataSet有一个属性,你在DBGrid的OnTitleClick事件中写下面的语句,就可以随意排序。
      ClientDataSet1.IndexFieldNames := Column.FieldName;
    2:其他的数据集控件如TQuery、TADOQuery、TTable等等,我也曾经寻找过是否有类似的简便的方法,结果没有找到。也许有,也许没有,不得而知。所以,解决的办法就是自己写SQL语句了。呵呵!如果有那位高手能有更加简单的方法,请贴!   对于这个问题,我是这么想的:TClientDataSet控件它有着自己的特殊性,一般用在三层的结构中比较多。它能够根据用户自己的需求创建一个虚拟的表。然后把数据一次性读入在内存中。而其他的数据集一般都用在两曾结构中,直接和数据库相连接。它只在数据库中取部分数据(如果数据量太大,不能一次显示出来),而这些数据早就已经通过我们写的SQL语句在数据库中排序好了,传递过来。
        如果有其他的第三方的DBGrid控件,我想它如果能有排序的功能,那么它应该隐藏了一个类似于TClientDataSet的数据集控件,只是封装后,我们看不到而已。                                ----个人观点,仅供参考。如有错误,纯属正常。
      

  6.   

    对DBGrid排序没有意义
    你可以设置对应的DataSet的KeyField KeyFieldNames
      

  7.   

    在dbgrideh中可实现单击标题自动排序的功能!而且还能按多列排序.建议你用dbgrideh取代dbgrid.