DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: a12315
今日帖子: 50
在线用户: 10
导航: 论坛 -> 论坛精华贴 斑竹:liumazi,iamdream  
作者:
男 xiaofang10211 (小放) ★☆☆☆☆ -
盒子活跃会员
2004/8/21 18:04:49
标题:
求dbgrih中如何实现自动排序? 浏览:5425
加入我的收藏
楼主: dbgrih中如何实现自动排序?
用adotable连接!
----------------------------------------------
-
作者:
男 brh616 (风风风) ★☆☆☆☆ -
盒子活跃会员
2004/8/21 18:17:14
1楼: 把那个DataService目录里的文件EhLibADO.Pas包含到工程里,然后打开grid的sortjiu可以了,具体可以看帮助,讲的很清楚的
----------------------------------------------
风风风
作者:
男 liu55721 ( ) ★☆☆☆☆ -
盒子活跃会员
2004/8/21 21:18:28
2楼: 把ADO Table组件的IndexFieldNames属性设置成你要排序的字段名就可以自动排序
----------------------------------------------
-
作者:
男 cnxxx (我本高手) ★☆☆☆☆ -
盒子活跃会员
2004/8/22 0:54:53
3楼: delphi安装目录下有一个adotest的例子就有这个功能,看看dbgrid的TitleClick事件就知道了,如下:

procedure TADODBTest.GridTitleClick(Column: TColumn);
var
  DataSet: TDataSet;
begin
  if not FMovingColumn then
  begin
    DataSet := Column.Field.DataSet;
    if DataSet is TCustomADODataSet then
    with TCustomADODataSet(DataSet) do
    begin
      if (Pos(Column.Field.FieldName, Sort) = 1) and (Pos(' DESC', Sort) = 0) then
        Sort := Column.Field.FieldName + ' DESC' else
        Sort := Column.Field.FieldName + ' ASC';
      StatusMsg := 'Sorted on '+Sort;
    end;
  end;
  FMovingColumn := False;
end;

procedure TADODBTest.MasterGridColumnMoved(Sender: TObject; FromIndex,
  ToIndex: Integer);
begin
  FMovingColumn := True;
end;
----------------------------------------------
黑夜中,一眼望去,我就是高手。
作者:
男 coolhezhi (帆) ★☆☆☆☆ -
普通会员
2004/9/17 15:45:07
4楼: 如何建立组合索引呢?
好像在IndexFieldNames属性中输入两个字段不行,有办法吗?
----------------------------------------------
-
作者:
男 vagrant2005 (vagrant2005) ★☆☆☆☆ -
普通会员
2005/3/21 9:54:51
5楼: 如何建立组合索引呢?
好像在IndexFieldNames属性中输入两个字段不行,有办法吗?

建立索引就可以了
----------------------------------------------
-
作者:
男 microbezhang (mic) ★☆☆☆☆ -
普通会员
2005/3/23 15:55:29
6楼: 如果使用SQL语言操作的话,就直接ORDER嘛
----------------------------------------------
-
作者:
男 weblsq (weblsq) ★☆☆☆☆ -
盒子活跃会员
2005/4/28 16:16:48
7楼:  一个很实用的Ehlib排序函数,适合ADO 
 Ehlib3.0版本以上虽然支持排序功能,但不支持带有Order By的SQL语句,而且排序很慢;我写的这个排序函数,利用ADO的sort方法,排序很快,几万条数据也是很快。该函数支持Lookup字段排序,不支持计算字段排序,因为计算字段值在内存里高速运算。排序分为:升序、降序和默认三种,支持排序图标。

procedure  SortDBGridEh(Sender: TObject; ACol: Integer;
  Column: TColumnEh);
var
  FieldName, SortStr: string;
begin
  Screen.Cursor := crSQLWait;
  try
    if (Sender is TDBGridEh) and
      ((Sender as TDBGridEh).DataSource.DataSet <> nil) then
    begin
      if not ((Sender as TDBGridEh).DataSource.DataSet is TCustomADODataSet) then
        Exit;

      if not (Sender as TDBGridEh).DataSource.DataSet.Active then
        Exit;

      FieldName := Column.FieldName;
      if (Sender as TDBGridEh).DataSource.DataSet.FindField(FieldName).IsBlob then
        Exit;

      if (Sender as TDBGridEh).DataSource.DataSet.FieldByName(FieldName).FieldKind =
        fkData then
        SortStr := FieldName
      else if (Sender as TDBGridEh).DataSource.DataSet.FieldByName(FieldName).FieldKind =
        fkLookup then
        FieldName := (Sender as TDBGridEh).DataSource.DataSet.FieldByName(FieldName).KeyFields
      else
        FieldName := '';

      if (FieldName = '') or (Pos(';', FieldName) > 0) then
        Exit;
      case Column.Title.SortMarker of
        smNoneEh:
          begin
          Column.Title.SortMarker := smUpEh;
          TCustomADODataSet((Sender as TDBGridEh).DataSource.DataSet).Sort :=
          FieldName;

          end;
        smUpEh:
          begin
          Column.Title.SortMarker := smDownEh;
          TCustomADODataSet((Sender as TDBGridEh).DataSource.DataSet).Sort :=
          FieldName + ' DESC';
          end;
        smDownEh:
          begin
          Column.Title.SortMarker := smNoneEh;
          TCustomADODataSet((Sender as TDBGridEh).DataSource.DataSet).Sort := '';
          end;
      end;
    end;
  finally
    Screen.Cursor := crDefault;
  end;
end;

--程序实现如下:
--在DBGridEh的事件OnTitleBtnClick引用该函数即可:
procedure TFrmU_BasicSetup.dbgAddrCodeTitleBtnClick(Sender: TObject;
  ACol: Integer; Column: TColumnEh);
begin
   SortDBGridEh(Sender, ACol, Column);
end;
--为了保证表格的每一列都能点击触发排序,你需要将你需要排序的列属性 
--  Title->TitleButton设置为True。
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行70.3125毫秒 RSS