按照网友提示:
1.在窗体上放置一个 DBGridEh 组件,并将其连接到相应的 BDE 数据集; 
2.将该组件的[OptionsEn]中的 dgAutoSortMarking 属性设置为 True; 
3.双击该组件,在其弹出的属性编辑器中添加相关字段; 
4.将要排序的字段的属性列表的 [Title]的 TitleButton 属性设置为 True;
5。在 uses 子句中加上 EhlibBDE单元。虽然数据能正常显示,并在TITLE出现指示排序的小三角形,但排序并不按照鼠标点击时三角形变化而变化?为什么?另外请问 DBGridEh 和 dxDBGrid(也有上面的问题)哪一个更好一些?有网友说用了Ehlib的程序在其它机器上运行时会出现问题?!

解决方案 »

  1.   

    给你写一个函数在DBGridEh1TitleBtnClick(Sender: TObject; ACol: Integer;
      Column: TColumnEh);调用
    begin
    sort(column.FieldName,ADataSet:TQuery);//AdataSet为你DBGRID连接的数据集
    end;Procedure Sort(AField:string;ADataSet:TQuery);
    begin
      If SortType='' Then SortType:='ASC';
      if SortField=AField Then
        If SortType='ASC' Then SortType:='DESC' else SortType:='ASC'
      else
        SortType:='ASC';
      SortField:=AField;
      ADataSet.sort:=trim(AField)+' '+SortType;
    End;
      

  2.   

    sky2004(sky):
            谢谢回复,我用的是BDE不是ADO!实际上我的测试程序上只放了三个控件:DataSource,Table和DBGridEh!
                                     rlpcdk
      

  3.   

    原来我用的DBGridEh控件是不需要写那种排序代码的,直接做楼主的
    那个设置就ok了
    现在设置了也不能用
    郁闷
      

  4.   

    我想要ehlib套件,请问哪里有
      

  5.   

    http://down.91.com/soft_down.aspx?id=7138
    可以下载v3.22
      

  6.   

    我下载安装了一个PDBGridEh1,看了一些相关资料,不过仍然有些问题:
    1、新建一个窗体,添加ADOConnection1,ADODataSet1,DataSourse1,PDBGridEh1,Button1,
    2、建立连接后在设计窗体中PDBGridEh1可以正常显示一个表的数据了
    3、Button1中写入:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
     ADODataSet1.Insert;
     ADODataSet1.FieldByName('COIL_Weight').AsInteger:=3110;
     ADODataSet1.FieldByName('PRODUCTION_TIME').AsDateTime :=Now;
     ADODataSet1.Post ;
    end;
    4、如果这张表只有这两个字段的话,我要实现每次按下Button1后,新添加的记录都显示在PDBGridEh1表格的第一行,也就是按PRODUCTION_TIME字段排倒序,
       1.在Unit1单元中的Uses中加入EhlibADO;
       2.把PRODUCTION_TIME字段属性的title->titlebutton属性设置位true
       3.PDBGridEh1的OptionsEh的dgAutoSortMarking 属性设置为 True;问题如下:
      1、排序完全是乱的,点击表中的PRODUCTION_TIME列值,也得不到预定效果
      2、如果把把PRODUCTION_TIME字段属性的title->titlebutton属性设置位false,点击表中的PRODUCTION_TIME列值使按降序排列,这时添加的记录才能在最上面一行显示,但每次都要点击,也不是我的预期效果,请问怎么才能达到我的要求呢?问题出在哪里了呢?
      

  7.   

    还需要设置排序端
    Unit DataSet Local sorting Server sorting Local filtering Server filteringEhLibBDE TQuery, TTable  N Y Y Y
    EhLibADO TADOQuery, Y Y Y YTADODataSet EhLibCDS TClientDataSet Y Y Y Y
    EhLibDBX TSQLQuery,TSQLDataSet N Y N YEhLibIBX TIBQuery,TIBDataSet  N Y Y YEhLib Software
      

  8.   

    各位大虾,我下载的EHlib为什么安装不上啊,总提示少一个单元文件
    请问是怎么回事?
      

  9.   

    如果是用ADO的话,引用一个单元EHLIBADO,如果是BDE的话那就是EHLIBBDE
      

  10.   

    dxDBGrid好用,可以通过OptionsBehavior下面得sdgoAutosort来设置是否出现指示排序的小三角形,排序按照鼠标点击时三角形变化而变化
      

  11.   

    数据源用query不要用 table好象,我以前遇到过
      

  12.   

    http://www.delphibbs.com/keylife/iblog_show.asp?xid=5161
    DBGRIDEH 组件在Borland开发工具中应用全攻略 【陈文彬】
      

  13.   

    对,用Query不要用Table,Table是用Query间接实现的,好象容易出问题,处理大量数据时效率差。
      

  14.   

    我这边是AdoQuery来实现的,可行。我贴给你看看。
    DBGridEh.OptionsEh := DBGridEh.OptionsEh + [dghDblClickOptimizeColWidth,dghAutoSortMarking];DBGridEh.ColumnDefValues.Title.TitleButton := True;DBGridEh.SortLocal := True;然后引入EhLibADO单元,不需要任何排序代码就可以的了。关键在于DBGridEh.SortLocal := True;具体细节Ehlib的帮助里面写的很清楚了:)楼主可以试一下!
      

  15.   

    用dxdbgrid或者cxgrid吧,dbgrideh的自动排序有很多bug的
      

  16.   

    不是有很多bug,我想大概是有的地方没有注意到吧。我一直用DBGridEh,从3.3版本到现在的3.6版本。排序、打印、数据导入导出等都一直用得很好。只是各个不同的版本有点变化,但功能都能实现的。
      

  17.   


    i:=TDBGridEh(ActiveControl).SelectedIndex;
    field:=TDBGridEh(ActiveControl).Columns[i].Title.Caption;
    if not (ads.FieldByName(field).Lookup) then
      ads.Sort:=field+' ASC'
    else
    begin
      ads.Sort:=ads.FieldByName(field).LookupKeyFields+' ASC';
    end;

    i:=TDBGridEh(ActiveControl).SelectedIndex;
    field:=TDBGridEh(ActiveControl).Columns[i].Title.Caption;
    if not ADS.FieldByName(field).Lookup then
      ADS.Sort:=field+' DESC'
    else
    begin
      ads.Sort:=ads.FieldByName(field).LookupKeyFields+' DESC';
    end;
      

  18.   

    换用CxGrid吧,功能超强不说还可以themes... ...