请问  DbGridEh   用 clientdataset 作数据源时 怎样 实现 点击 列头 时 实现 排序 ??????????
请给 出 详细 的代码 ,谢谢!!

解决方案 »

  1.   

    Delphi 7中的安装方法   
    1. 把 EhLib 中的 common 和 DataService 文件拷贝到 Delphi7 目录中.
       2.在 TOOLS->Environment Options->Library->Library Path 中添入EHLIB路径。
       3.打开新建文件夹中的 EHLIB70.DPK ,编译一下,但不要安装。
       4.打开Ehlib中的DclEhLib70.DPK,编译,安装 
       5. 在Delphi 7中打开DclEhLib70.dpk,编译并安装。自动显示标题行的升降排序标志符(▽降序△升序)并做相应排序
        DBGridEh组件可以在标题行单元格中显示小三角形升、降排序标志符图片,在运行时可点击标题行,图片自动切换并做相应排序。具体属性设置如下:uses EhLibAdo;(如果客户端用ADO控件)
    DBGridEh1.ColumnDefValues.Title.TitleButton:=True(每列都排序)
    DBGridEh1.OptionsEh:=dghAutoSortMarking 
    DBGridEh1.SortLocal:=True
    切记lookup型字段不可做上述设置,否则系统会提示错误。
      

  2.   

    DbGridEh 会自动排序的,如果没有请检查sortoncolumnclick属性
      

  3.   


    procedure Tform1.DBGridEh1TitleBtnClick(Sender: TObject;
      ACol: Integer; Column: TColumnEh);
    begin
      inherited;
      if DBGridEh1.DataSource.DataSet.Active then
      begin
        DBGridEh1.DataSource.DataSet.DisableControls;
        try
          if Column.Title.SortMarker = smDownEh
             then Tclientdataset(DBGridEh1.DataSource.DataSet).Sort := Column.FieldName
             else Tclientdataset(DBGridEh1.DataSource.DataSet).Sort := Column.FieldName+' DESC';
        finally
          DBGridEh1.DataSource.DataSet.EnableControls;
        end;
      end;
    end;
      

  4.   

    To:zsjzwj(北极熊)   sortoncolumnclick属性  在哪里呀?? 找不到!!!TO: hqhhh(枫叶)  编译时说 没有 Sort  属性 !!!
      

  5.   

    不好意思,
    试试这个函数:
    function GridSort(Grid: TDBGridEh):String;   //列表框抬头排序
    var i :Integer;
        s:String;
       function DeleteStr(str:String; sunstr:String): String;
       var i:Integer;
       begin
         i := Pos(sunstr,str);
         if i <> 0 then Delete(str,i,Length(sunstr));
         Result := str;
       end;
    begin
      s := '';
      for i := 0 to Grid.SortMarkedColumns.Count-1 do
       if Grid.SortMarkedColumns[i].Title.SortMarker = smUpEh then
         s := s + Grid.SortMarkedColumns[i].FieldName + ' DESC , '
       else
         s := s + Grid.SortMarkedColumns[i].FieldName + ', ';
      if s <> '' then s := ' ORDER BY ' + Copy(s,1,Length(s)-2);
    //  s := DeleteStr(s,'1');
      Result :=s;
    end;
    procedure Tfrom1.Button1Click(Sender: TObject);
    begin
      with clientdataset1 do
      begin
        Close;
        CommandText :='Select * from table ' + GridSort(DBGridEh1);
        Open;
      end;
    end;
      

  6.   

    要用 sql 语句????  但我的 clientdataset  是没有 数据源 的, 因为 数据 复制 入去的
      

  7.   

    在程序的查找路径中包含Ehlib\DataService,然后在程序中uses EhLibCDS这个单元。再就是按rgn() 所说的做,应该就可以了!
      

  8.   

    可以不用代码实现的,这些过程Ehlib都帮我们实现了。只好象不可以在SQL语句里有order by 语句。
      

  9.   

    DBGridEh1.SortOnColumnClick := true;  (这是默认的属性值)你使用的是dbgrideh控件的话应该有这个属性的, 我的是3.2的
      

  10.   

    在dbgrid1中titleclick:
    table1.sort := columns.title.caption;相信dbgrideh类似