CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

再问DbGrid按列标题排序问题

楼主kyong()2004-08-03 12:38:42 在 Delphi / VCL组件开发及应用 提问

下列事件过程,点击列标题后能排序,颜色和▼\▲能够切换,但是,点击另一列后,原来那一列的▼或▲符号不会消失.我的要求是,点击另一列后原来的那一列只显示列标题,不在显示▼或▲符号,请问怎么处理?  
  procedure   TForm1.DBGrid3TitleClick(Column:   TColumn);  
  var   i:integer;  
  begin  
    if   adoquery2.Sort   =   Column.FieldName   then     //AdoQCX为MyDBGrid绑定的Tadoquery  
        begin  
            For   i:=0   to   dbgrid3.Columns.Count-1   do  
                dbgrid3.Columns[i].Title.RestoreDefaults;  
            adoquery2.sort   :=   Column.FieldName   +   '   DESC';  
            Column.Title.Font.Color:=clPurple;         //用紫色表示   逆序  
            dbgrid3.Canvas.Refresh   ;  
            Column.Title.Caption:=dbgrid3.SelectedField.FieldName   +   '▼'   ;  
        end  
    else   begin  
        For   i:=0   to   dbgrid3.Columns.Count-1   do  
            dbgrid3.Columns[i].Title.RestoreDefaults;  
        adoquery2.Sort   :=   Column.FieldName;  
        Column.Title.Font.Color:=clBlue;         //用蓝色表示正序字段  
        dbgrid3.Canvas.Refresh   ;  
        column.Title.Caption:=dbgrid3.SelectedField.FieldName   +   '▲'   ;  
        end;  
  end; 问题点数:0、回复次数:12Top

1 楼ljz9425(阿九)回复于 2004-08-03 12:45:30 得分 0

用DBGridEHTop

2 楼kyong()回复于 2004-08-03 12:51:37 得分 0

我是想问上面代码怎么修改才能达到要求?Top

3 楼kyong()回复于 2004-08-03 20:00:32 得分 0

寻找高手Top

4 楼sousouwjh(sousouwjh)回复于 2004-08-03 20:14:22 得分 0

点击后循环各COULMN判断是不是当前列如何!不是就把题头改下!Top

5 楼ChinaZhou(斯科)回复于 2004-08-03 20:30:11 得分 0

给column置空不就行了吗?Top

6 楼kyong()回复于 2004-08-03 20:51:01 得分 0

怎么置空?是这样吗?通不过  
  column.Title.Caption:='';Top

7 楼kyong()回复于 2004-08-03 21:00:42 得分 0

如何判断是否当前列呢?Top

8 楼sousouwjh(sousouwjh)回复于 2004-08-04 09:17:06 得分 0

点题头后用一个变量保存下来嘛!Top

9 楼kyong()回复于 2004-08-04 21:52:00 得分 0

希望给我写出代码Top

10 楼Linyco(Linyco)回复于 2004-08-04 21:56:07 得分 0

我为了与广大DELPHI爱好者共同讨论,建立了一个群,欢迎大家加入!  
  群号是:5245338Top

11 楼kyong()回复于 2004-08-04 22:44:25 得分 0

怎么没有高手帮忙呀?Top

12 楼hlb1111(蜀狼)回复于 2004-11-03 12:53:57 得分 0

procedure   TForm1.DBGridTitleClick(Column:   TColumn);  
  var   s,cFieldName:string;  
          i:integer;  
          DataSet:TDataSet;  
          procedure   setTitle;  
          var   ii:integer;  
                  cStr:string;  
                  c:TColumn;  
          begin  
              for   ii:=0   to   TDBGrid(Column.Grid).Columns.Count-1   do  
              begin    
                  c:=TDBGrid(Column.Grid).Columns[ii];  
                  cStr:=c.Title.Caption;  
                  if   (pos('▲',cStr)=1)   or   (pos('▼',cStr)=1)   then   begin  
                      Delete(cStr,1,2);  
                      c.Title.Caption:=cStr;  
                  end;  
              end;  
   
          end;  
  begin  
      setTitle;  
      DataSet:=Column.Grid.DataSource.DataSet;  
      if   Column.Field.FieldKind=fkLookup   then  
          cFieldName:=Column.Field.KeyFields  
      else   if   Column.Field.FieldKind=fkCalculated   then    
          cFieldName:=Column.Field.KeyFields  
      else  
          cFieldName:=Column.FieldName;  
      if   DataSet   is   TCustomADODataSet   then   begin  
          s:=TCustomADODataSet(DataSet).Sort;  
          if   s=''   then   begin  
              s:=cFieldName;  
              Column.Title.Caption:='▲'+Column.Field.DisplayName;    
          end  
          else   begin    
              if   Pos(cFieldName,s)<>0   then   begin    
                  i:=Pos('DESC',s);  
                  if   i<=0   then   begin    
                      s:=s+'   DESC';  
                      Column.Title.Caption:='▼'+Column.Field.DisplayName;    
                  end    
                  else   begin  
                      Column.Title.Caption:='▲'+Column.Field.DisplayName;    
                      Delete(s,i,4);  
                  end;    
              end    
              else   begin  
                  s:=cFieldName;    
                  Column.Title.Caption:='▲'+Column.Field.DisplayName;  
              end;    
          end;    
          TCustomADODataSet(DataSet).Sort:=s;  
      end    
      else   if   DataSet   is   TClientDataSet   then   begin  
  //         TClientDataSet(DataSet).IndexFieldNames:=Column.FieldName;    
          if   TClientDataSet(DataSet).indexfieldnames<>''   then    
          begin  
              i:=TClientDataSet(DataSet).IndexDefs.IndexOf('i'+Column.FieldName);    
              if   i=-1   then  
              begin    
                  with   TClientDataSet(DataSet).IndexDefs.AddIndexDef   do    
                  begin  
                      Name:='i'+Column.FieldName;    
                      Fields:=Column.FieldName;  
                      DescFields:=Column.FieldName;    
                  end;    
              end;  
              TClientDataSet(DataSet).IndexFieldNames:='';    
              TClientDataSet(DataSet).IndexName:='i'+Column.FieldName;  
              Column.Title.Caption:='▼'+Column.Field.DisplayName;    
          end    
          else  
          begin    
              TClientDataSet(DataSet).IndexName:='';  
              TClientDataSet(DataSet).IndexFieldNames:=column.fieldname;    
              Column.Title.Caption:='▲'+Column.Field.DisplayName;    
          end;  
      end;  
  end;Top

相关问题

  • DBGRID标题排序!
  • 在dbgrid中,点击标题排序
  • 在dbgrid中标题栏上单击后该列排序,再单击反向排序,如何实现?谢谢!
  • 有没有类似DBgrid的控件,点击列上的标题便可按这一列的升降排序?
  • 单击dbgrid的title,按标题排序,我的语句不行,why??????高分赠!!!!
  • 数据列标题实现---排序?(看不到代码)
  • 如何禁止DataGridView点击列标题排序?
  • 如何禁止DataGrid点击列标题后排序?
  • 还是dbgrid排序
  • dbgrid排序问题

关键词

  • grid
  • cfieldname
  • column
  • fieldname
  • dbgrid3
  • tclientdataset
  • caption
  • 列标题
  • cstr
  • adoquery2

得分解答快速导航

  • 帖主:kyong

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo