DBGridEh(增强型表格组件)功能详解

DBGRIDEH 是Enlib 3.0组件包中的组件之一。Enlib 3.0组件包是一位俄国人为增强Borland系列开发工具功能而开发的第三方组件,它具有界面友好、功能强大、开发效率高、、快速制作预览/打印简单中国式报表等特点。因此,一推出即受到广大Borland程序员的青睐。目前这个版本支持Borland Delphi versions 4,5,6&7 和 Borland C++ Builder versions 4 & 5 ,可极大地提高数据库应用系统客户端的性能。许多商品软件如《速达2000》等都使用了该组件。下面本人将使用该组件在实际系统开发过程中的经验总结如下。

   Enlib3.0组件包中最重要而且功能最强大的莫过于dbgrideh组件,本文介绍的所有实例均在Delphi 7开发环境下调试通过。

DBGridEh(增强型表格组件)功能详解
   DBGridEh组件无论在外观上还是功能上都非常类似Borland开发工具中现有的dbgrid组件,它除了提供dbgrid组件的全部功能外,还增加了下列新功能:

● 任意选择多行、列或矩形区域的数据.
● 为多列标题设定共同的父标题行.
● 表格底部(Footer) 区显示求和、计数和其它统计信息.
● 自动调整组件宽度与客户区域等宽.
● 设置标题行、数据行的高度.
● 超长的标题行、数据行文本自动折行处理.
● 标题行可作为按钮使用,并可选择是否显示排序标志符(▽降序△升序).
● 点击列标题可对当前列自动排序而无需编写代码.
● 能够自动设置删除超长文本显示不下的多余部分,并以省略号(…)代替.
● 自动搜索字段(Lookup)数据单元格以单、多列字段下拉列表形式显示.
● 自动搜索字段(Lookup)数据单元格可进行增量搜索.
● 可锁定任意列数在屏幕水平方向不滚动.
● 日期时间控件DateTime picker 可支持TDateField and TDateTimeField两种日期格式.
● 根据字段不同值显示关联的ImageList 对象图片组中的图片.
● 隐藏任意列.
● 显示3D风格的数据区、表尾区和锁定滚动列,制作3D外观表格.
● 显示Memo类型字段值.
● 除BOOLEAN型数据外,其它数据类型也可以检查框( checkbox )形式显示数据.
● 使用专门的函数和过程来存取以reg或ini文件格式保存的表格布局(包含各数据列表、数据列访问顺序、列宽、索引标识、行高等信息)文件。
● 通过设置数据单元格的hint和ToolTips属性,当移动鼠标到该单元格时,可以显示单元格容纳不下的文本内容.
● 将组件中数据导入/导出到Text, Csv, HTML, RTF, XLS 和内部数据等多种格式的文件中.

   DBGridEh组件主要属性见下表(其它属性参见dbgrid):

   DBGridEh组件事件基本与DBGrid相同,在此不再赘述。

 


http://twct.com/attachments/month_0503/74v0_sf_20047282274.jpg

 

二、应用实例

Enlib3.0组件包安装成功后,在系统的组件面板中会显示“enlib”组件包标签(如图1),添加DBGridEh到窗体的方法与其它组件一样。在窗体中添加该组件后,请跟 我一起来实现图2的一些特殊效果,具体属性设置请参考属性表的说明。

 


 A、定制标题行
1、制作复杂标题行
标题行可设为2行以上高度,并可以为多列创建一个共同的父标题行。为实现这个效果,需在各个列标题属性中以“|”分隔父标题和子标题,如办公用品包括代码和名称两部分,具体属性设置如下:
usemultititile=true;
titlelines=2
DBGridEh.Columns[0].Title.Caption:='办公用品|代码';
DBGridEh.Columns[1].Title.Caption:='办公用品|名称';
2、标题行显示图片
实现图2中的购买人标题行显示效果。首先添加一个imagelist组件img1并在其中添加一组bmp,ico格式的图片。然后将DBGridEh的TitleImages设置为img1.最后在需要显示图片的列标题的imageindex中设置需要显示的img1中图片的序号。
3、自动显示标题行的升降排序标志符(▽降序△升序)并做相应排序
DBGridEh组件可以在标题行单元格中显示小三角形升、降排序标志符图片,在运行时可点击标题行,图片自动切换并做相应排序。具体属性设置如下:
OptionsEh=dghAutoSortMarking
Column.Title.TitleButton=true
SortMarkedColumns为当前排序列可在运行时使用.
然后在该列的ontitleclick事件中添加代码:

procedure TForm_Query.DBGridEh1TitleBtnClick(Sender: TObject; ACol: Integer; Column: TColumnEh);
var
 sortstring:string; //排序列
begin
 //进行排序
 with Column do
 begin
   if FieldName = '' then
     Exit;
   case Title.SortMarker of
     smNoneEh:
     begin
       Title.SortMarker := smDownEh;
       sortstring := Column.FieldName + ' ASC';
     end;
     smDownEh: sortstring := Column.FieldName + ' ASC';
     smUpEh: sortstring := Column.FieldName + ' DESC';
   end;
 //进行排序
   try
     dataset.Sort := sortstring //dataset为实际数据集变量名
   except
   end;
 end;
end;

切记lookup型字段不可做上述设置,否则系统会提示错误。
 
另外,组件说明书中提到不需要编写代码即可自动排序,但是不编写代码自动排序方法我还没找到,有知道的朋友烦请告诉我一声啊!让我也对程序代码进行“减肥”。
 
B、定制表格底部(footer)区域的汇总统计行
DBGridEh组件可以在表格底部显示汇总行,如记录数合计、列字段累加和等信息。在FooterRowCount中设置底部显示的行数;然后在Footers编辑器中添加一个或多个显示列,显示列可以是字段值累加和、记录数合计、字段值或静态文件等集合类型,可以在设计时在ValueType属性中设置,也可在运行时通过设置Footers[i].ValueType指定其类型。其含义见下表:
 


属性值

fvtSum

FvtCount

fvtFieldValue

fvtStaticText

含义

字段累加和

记录数合计

字段值

静态文本

切记设置DBGridEh.SumList.Active为True,才会进行汇总统计运算。需注意的是,如显示类型为不是当前列的累加和,则需在fieldname属性中指定汇总列,其它类型则无此要求。
 
C、定制表格数据单元外观
1、根据不同字段值显示相应的小图片
如根据库存材料的不同状态在数据单元格中显示相应图片,具体设置如下:
添加一个imagelist组件img1并在其中添加一组bmp,ico格式的图片。然后将需要显示图片的列的imagelist属性设置为img1;在keylist属性中添加实际数据存储值,一行为一个值,切记一定要与imagelist中图片顺序一一对应,否则会张冠李戴,面目全非。还可在picklist中添加提示信息,也要求是一行为一个值,并设tooltip为true,那么,运行时当鼠标移动到该数据单元格时在显示图片的同时还显示提示信息,怎么样,功能够强大吧!可使用空格键或鼠标切换下一张图片,图片切换的同时也改变了实际存储数据值。也可通过shift+空格或鼠标切换为上一张图片。这样就实现了上下两个方向图片切换。
 
2、显示检查框(checkbox)外观
对于Boolean型字段值在dbgrideh组件中自动显示为检查框。通常情况下我们需将非Boolean型字段值也此外观显示,如性别字段为字符型,字段值为“男性”时为选中,“女性”时为未选中。需要在keylist编辑器中设置实际存储数据值,第一行为选中时的值“1”,第二行为未选中的值“0”,第三行为其它值“2”,支持三态显示。
 
3、显示单、多列下拉列表
根据单元格字段值显示与其相关的其它表字段内容,如部门代码字段显示为部门名称。首先需在当前表中新建立一个lookup型字段,设置好关联表的字段和返回字段。多列下拉列表需在单列基础上做进一步设置,在LookupDisplayFields中以“;”号将关联表中多个字段分隔开,而且返回字段必须作为其中的第一项。具体设置如下:
dropdownshowtitles=true
dropdownsizing=true
dropdownwidth=-1
例:当前表中只有部门代码无部门名称列,需与部门表建立关联,当点击单元格时以部门代码、部门名称两列下拉列表形式显示。
 
4、显示日历下拉列表
Date和DateTime类型字段值均可以此形式显示。外观与编辑框无异,当点击该单元格时,右侧会出现“▽”符号,点击之即可出现日历下拉列表。有时不希望出现日历下拉列表,只需设置Column.ButtonStyle属性为cbsNone即可,此方法同样适用于其它组件不以特殊外观显示的情况。
 
5、3D或平面外观效果
设置OptionsEh属性中fixed,frozen,footer和datarows等属性表格外观为3D效果,设置flat为true则为平面外观效果.
 
6、锁定多列不滚动
当表格水平方向信息在一屏幕显示不下时,此项功能非常有用。例如,工资表格中包含姓名、基本工资、绩效工资等信息一屏幕显示不下,需要通过移动水平滚动条显示下一屏信息。如果不锁定关键字段列如姓名,则移动到下一屏时就不知道此条记录对应的姓名。因此,在实际应用中经常需锁定多列不滚动。
 
例:姓名字段为表格第二列,则设置FrozenCols=2.这样当一屏幕显示不下,通过移动水平滚动条显示下一屏信息时,表格前两列不滚动,作为参照列。
 
D、导入/导出数据
   导入/导出数据在实际处理过程中是比较烦琐的。但是Enlib3.0提供了一系列函数让你轻松实现此功能,而且支持的文件格式很多:Text, Csv, HTML, RTF, XLS 和内部数据格式。除此之外,还可对任意选择的数据区域进行操作。函数如下:

Pascal: SaveDBGridEhToExportFile(TDBGridEhExportAsText,DBGridEh1,'c:/temp/file1.txt',False);

C++: SaveDBGridEhToExportFile(__classid(TDBGridEhExportAsText),DBGridEh1,"c://temp//file1.txt",false);

说明:其中false参数表示导出的是选中的局部数据区域数据,true则为整个表格数据。

  例:将当前表格中数据导出为EXCEL等格式文件。
   在窗体中添加一个SaveDialog组件和“导出”按钮B_exp,在“导出”按钮的click事件中添加如下代码:

procedure TForm1.B_expClick(Sender: TObject);
var 
 ExpClass:TDBGridEhExportClass;
 Ext:String;
begin
 SaveDialog1.FileName := 'file1';
 if (ActiveControl is TDBGridEh) then
   if SaveDialog1.Execute then
   begin
     case SaveDialog1.FilterIndex of
       1: begin ExpClass := TDBGridEhExportAsText; Ext := 'txt'; end;
       2: begin ExpClass := TDBGridEhExportAsCSV; Ext := 'csv'; end;
       3: begin ExpClass := TDBGridEhExportAsHTML; Ext := 'htm'; end;
       4: begin ExpClass := TDBGridEhExportAsRTF; Ext := 'rtf'; end;
       5: begin ExpClass := TDBGridEhExportAsXLS; Ext := 'xls'; end;
     else
       ExpClass := nil; Ext := '';
   end;
   if ExpClass <> nil then
   begin
     if UpperCase(Copy(SaveDialog1.FileName,Length(SaveDialog1.FileName)-2,3)) <> UpperCase(Ext) then
       SaveDialog1.FileName := SaveDialog1.FileName + '.' + Ext;
     SaveDBGridEhToExportFile(ExpClass,DBGridEh1,SaveDialog1.FileName,False);
     //其中false为局部数据
   end;
 end;
end;

 

E、将存在的DBGrid组件转换为DBGridEh组件.
   通过笔者上述介绍,想必你已经对Enlib组件包产生好感而且越越欲试了,那就赶快下载使用吧。但是,使用一段时间并且喜欢上它后,你又有新的问题产生了,那就是为了保持界面风格一致,能否将已经开发完成的应用程序中的DBGrid组件能否转换为DBGridEh组件,进行一次彻底革命?答案是肯定的。尽管DBGridEh并不是继承于CustomDBGrid组件, 但是DBGridEh和DBGrid它们之间有许多相同之处.因此可以相互转换。

具体步骤如下:
1、在Delphi IDE下打开TDBGrid组件.
2、通过组合键Alt-F12将form 以文本方式显示;
3、将所有TDBGrid 对象名改变为 TDBGridEh对象名,如:DBGrid1: TDBGrid改为 DBGrid1: TDBGridEh;
4、再次通过组合键Alt-F12将文本方式恢复为form 显示;
5、将form各相关事件中定义的所有TDBGrid改为TDBGrideh,如DBGrid1: TDBGrid改为DBGrid1: TDBGridEh;
6、重新编译应用程序。

时间: 2024-09-18 12:57:06

DBGridEh(增强型表格组件)功能详解的相关文章

【X-Pack解读】阿里云Elasticsearch X-Pack 机器学习组件功能详解

X-Pack Machine Learning 数据复杂多变,当出现基础设施问题.入侵者或业务问题时,几乎不可能利用规则或通过人工监视仪表板发现问题.阿里云Elaticsearch的X-Pack引入了机器学习功能machine learning,可以实时地自动模拟 Elasticsearch 数据的行为--趋势.周期等.从而更快地发现问题.简化问题根源分析.降低误报率. 透过数据表象 借助机器学习功能,Elasticsearch能够机敏地迅速回答 "上周各小时每秒请求数量是多少?" 等

jQuery EasyUI框架中的Datagrid数据表格组件结构详解_jquery

基础DOM结构什么叫"完整的基础DOM结构",这里"基础"的意思是指这个结构不依赖具体数据,不依赖Datagrid的view属性,只要存在Datagrid实例就会存在这样的基础DOM结构:而"完整"的意思是指在冻结列,冻结行,标题,footer,分页这些功能块都存在时候的DOM结构. 要搞清楚Datagrid的工作原理,这个DOM结构必须要烂熟于胸的,我们直接来看这个"基础完整DOM结构"是什么样子的: <!-- dat

angularjs表格分页功能详解_AngularJS

接上一次,这次主要介绍表格分页功能,由于项目需要这个案例是关于前端分页的方式,现在很少会这么用了,但如有需要可以参考其中的思路 html: 1.通过UL来展示页标,其中每个页标的li是通过异步加载从获取到不同的表格数据来动态生成的. <div class="pagination"> <ul style="float:right"> <li id="previous"><a href=""

【X-Pack解读】阿里云Elasticsearch X-Pack 报告组件功能详解

X-Pack Reporting 阿里云Elaticsearch用户可以开箱即用X-Pack的报告组件功能,能够为Kibana 可视化或仪表板快速生成报告.用户可以即需即取报告.预约报告.根据特定条件触发报告,并自动将报告分享给他人如经理.客户.合规专员.报告所采用的架构为报告赋予了可扩展性,并且便于报告传输,让您能够随时随地获取 Kibana 中的信息. 自定义报表导出 Kibana 是您可视化和探索 Elasticsearch 数据的绝佳方法.X-Pack reporting 功能让您能够轻

【X-Pack解读】阿里云Elasticsearch X-Pack 安全组件功能详解

X-Pack Security 2017年1月爆发了Elasticsearch数据勒索事件,涉及到的数据至少500亿条,被删除数据至少450TB.如何提高Elasticsearch应用的安全性,是开发者面临的重要问题.Elasticsearch X-Pack中的安全组件提供了对应的安全解决方案,让IT和应用团队能够依赖 X-Pack 来区分和管理正常用户和恶意入侵者:与此同时,Elasticsearc中存储的数据始终享有可靠的安全保障,公司高管和客户都能高枕无忧. 密码管理 要想保护流经 Ela

【X-Pack解读】阿里云Elasticsearch X-Pack 告警组件功能详解

X-Pack Alerting CPU 使用率意外增加, 应用响应时间激增:503 错误的数量火箭式上升:Elasticsearch 索引率直线下降.尽管情况层出不穷,但是您可以通过X-Pack的告警组件Alerting发送您所需的警报,让您随时随刻掌握应用情况. 检测数据变化 X-Pack 中的 alerting 功能可让您充分利用 Elasticsearch 查询语言,当数据发生令您感兴趣的变化后,您能够发现这些变化. 换言之,如果您能够在 Elasticsearch 中查询某些数据,就能够

【X-Pack解读】阿里云Elasticsearch X-Pack 监控组件功能详解

X-Pack Monitoring 阿里云Elaticsearch已集成X-Pack组件,用户可以开箱即用监控功能,依靠运行Agent收集和监控Elaticsearch.Logstach.Kibana等实例的索引和指标,并借助Kibana可视化能力实时监控这些应用. ELK应用性能监控 X-Pack monitoring 功能提供了一种有效方法,让您能够密切关注 Elasticsearch.Kibana 和 Logstash 的性能.它的仪表板集合能够帮助您在各个层级上评估仪表板的状态,同时为您

【X-Pack解读】阿里云Elasticsearch X-Pack Graph组件功能详解

X-Pack Graph 存放在Elasticsearch中的文档之间存在着潜在的关系,人员.位置.偏好.产品等数据之间也存在着某种联系.Graph 功能提供了一种基于关系的方法,让用户能够利用 Elasticsearch 的相关性功能,探索数据中存在的联系. 以新方法探索 Elasticsearch 数据 Graph 功能是一种基于 API 和基于 UI 的工具,能够让您数据中存在的相关关系浮现出来,同时能够在任何规模下利用各项 Elasticsearch 功能,例如分布式查询执行.实时数据可

Bkh1.1.5建站系统功能概述与功能详解_常用工具

Bkh1.1.5功能详解 目录 一.    Bkh1.1.5建站系统功能概述.... 3 二.    注册用户功能详解.... 4 1.     注册用户功能概述... 4 2.     怎样注册成为一个站点的用户... 4 3.     登陆站点找到管理菜单... 5 4.     用户设置功能... 6 5.     我的文件库功能... 9 6.     我自己的站点... 9 7.     我加入的站点... 12 8.     我拥有的角色... 13 9.     我的博客... 1