logo资料库

DELPHI 表格控件DBGridEh使用详解 .pdf

第1页 / 共77页
第2页 / 共77页
第3页 / 共77页
第4页 / 共77页
第5页 / 共77页
第6页 / 共77页
第7页 / 共77页
第8页 / 共77页
资料共77页,剩余部分请下载后查看
白波九道整理自用版 DELPHI 表格控件 DBGridEh 使用详解 ----白波九道----- 第 1 页
白波九道整理自用版 一、 DBGridEh (增强型表格组件)功能详解 .....................................................................4 二、 应用实例 ..........................................................................................................................5 1. 定制标题行 ......................................................................................................................5 1) 制作复杂标题行.......................................................................................................5 2) 按钮式标题 ..............................................................................................................5 3) 标题行显示图片.......................................................................................................5 4) 标题行颜色(渐变)订制............................................................................................5 5) 如根据不同状态在数据单元格中显示相应图片...................................................5 6) 点标题排序 ..............................................................................................................6 2. 外观布局 ..........................................................................................................................9 1) 根据不同字段值显示相应的小图片.......................................................................9 2) 初始化所有表格控件属性的函数...........................................................................9 3) 显示检查框(checkbox)外观 .............................................................................10 4) 显示单、多列下拉列表.........................................................................................10 5) 显示日历下拉列表.................................................................................................10 6) 下拉式计算器.........................................................................................................11 7) 3D 或平面外观效果...............................................................................................11 8) 行头和列头的启用关闭.........................................................................................11 9) DBGrid 如何实现透明效果?.................................................................................11 10) 滚动条的各种应用.............................................................................................14 11) 设置 Rowheight 后如何将单元格内容纵向和垂直都居中?............................17 12) 自适应列宽 ........................................................................................................18 13) 分行分列、单元格的颜色设置.........................................................................21 14) 点击不同单元格列,执行不同的动作.............................................................27 15) HideDuplicates 合并行......................................................................................27 16) 鼠标移到某个单元格,指针形状改变.............................................................28 17) 自动填充网格列宽到网格客户区.....................................................................28 18) 从注册表或 ini 文件中保存或恢复网格和列的层次。...................................28 3. 编辑功能 ........................................................................................................................29 1) 表格的多行选择.....................................................................................................29 2) 文本多行显示.........................................................................................................31 3) 显示备注字段.........................................................................................................31 4) 显示数据时只显示两位小数.................................................................................31 5) 获得当前表中单元格的序号.................................................................................32 6) 怎样在 dbgridEh 和 Edit 中显示金额的千分号 ...................................................32 7) 使 DBGridEh 不滚动就能提交数据? .................................................................33 8) 我怎么把 dbgrid 里的数据一次插入到数据库呢 ................................................34 9) 在 DBGrid 中可选中行而又可进入编辑状态......................................................34 10) 修正 DBGrideh 丢失焦点时自动关闭输入法的问题 ......................................37 11) DBGrid 滚动表格的代码...................................................................................38 4. 统计功能 ........................................................................................................................39 1) 页脚合计 ................................................................................................................39 2) 定制表格底部(footer)区域的汇总统计行 .......................................................39 第 2 页
白波九道整理自用版 3) 设定 DbGridEh 合计行信息................................................................................39 4) TDBSumList 说明..................................................................................................40 5) 如何工作以及为什么有时 SumList 的集合值计算不正确? .............................41 6) dbgrideh 列求和 .....................................................................................................41 5. 数据功能 ........................................................................................................................42 1) 查找字段 点击某列值的下拉按纽弹出一个从数据库取值下拉列表...............42 2) 显示字段的单列或多列下拉列表.........................................................................42 3) 使用 DBGridEh 自动过滤实现方法 .....................................................................43 4) 使用 DBGridEh 自动过滤实现方法 2..................................................................45 5) DBGridEh 控件中使用过滤功能 (适用 ehlib 5.2 ehlib 5.3)................................45 6) 支持模糊查询.........................................................................................................46 7) 模糊过滤:...............................................................................................................48 8) ehlib4.4.50 中支持模糊匹配的修改方法..............................................................48 9) EhLib 5.0 Build 5.0.13 的过滤字串都是模糊过滤修改.......................................48 10) 滚动条滚动时选择不变,还有自动过滤功能的实现.....................................49 11) 增量搜索 ............................................................................................................50 12) ehlib 总是按两次 ctrl+f 才出来查找框,怎么办?.........................................50 13) 如何改良 dbgrideh 的文字过滤 ........................................................................50 14) 改进 DBGrideh 表头点击自动排序,实现双击状态轮流 .................................51 15) 改良 Ehlib 的排序功能,加快排序速度.............................................................53 16) 在 DbGridEh 中显示 TreeView 效果................................................................54 17) DBGridEh-KeyList 、PickList............................................................................55 18) 主从表设置 ........................................................................................................57 19) 在 DbGridEh 中显示表中表..............................................................................59 20) OnGetCellParams 事件创建数据编辑状态.......................................................59 6. 输入/输出 .......................................................................................................................62 1) 导入导出数据.........................................................................................................62 2) 从多种格式导入/导出数据到 TDBGridEh...........................................................63 3) DBGRID 生成 EXCEL 报表 .................................................................................63 4) 使用 TPrintDBGridEh 组件 .................................................................................67 5) 打印时确定 Ehlib 定义的报表表头颜色?............................................................67 6) Ehlib 中的 PrintDBGridEh 如何印页码,即第几页共几页 ...................................68 7) 怎么让 PrintDBGridEh 只打印 DbGridEh 中指定的列.......................................68 8) 怎样进行横向打印 / 打印预览?........................................................................68 7. 将存在的 DBGrid 组件转换为 DBGridEh 组件...........................................................68 EhLib 安装问题 .............................................................................................................70 1. EhLib 安装步骤 .............................................................................................................70 2. EhLib 安装问题(dbsumlst.dcu 出错)..........................................................................70 3. 安装提示找不到.BPL 文件 ...........................................................................................71 Delphi 下的优秀表格(Grid)显示控件........................................................................71 三、 四、 1. NextGrid.........................................................................................................................71 2. TopGrid 3.01...................................................................................................................71 3. XLGrid............................................................................................................................72 4. DevExpress ExpressQuantumGrid.................................................................................72 第 3 页
白波九道整理自用版 5. TMS Grid Pack...............................................................................................................74 6. EhLib..............................................................................................................................77 7. ProfGrid..........................................................................................................................77 8. EasyGrid.........................................................................................................................77 一、 DBGridEh(增强型表格组件)功能详解 DBGRIDEH 是 Enlib 3.0 组件包中的组件之一。Enlib 3.0 组件包是一位俄国人为增强 Borland 系列开发工具功能而开发的第三方组件,它具有界面友好、功能强大、开发效率高、、 快速制作预览/打印简单中国式报表等特点。因此,一推出即受到广大 Borland 程序员的青 睐。目前这个版本支持 Borland Delphi versions 4,5,6&7 和 Borland C++ Builder versions 4 & 5 ,可极大地提高数据库应用系统客户端的性能。许多商品软件如《速达 2000》 等都使用了该组件。下面本人将使用该组件在实际系统开发过程中的经验总结如下。 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 和内部数据等多种格式的文件 中. 第 4 页
白波九道整理自用版 二、 应用实例 1. 定制标题行 1) 制作复杂标题行 标题行可设为 2 行以上高度,并可以为多列创建一个共同的父标题行。为实现这个效果, 需在各个列标题属性中以“|”分隔父标题和子标题,如办公用品包括代码和名称两部分, 具体属性设置如下: usemultititile=true; titlelines=2 DBGridEh.Columns[0].Title.Caption := '办公用品|代码'; DBGridEh.Columns[1].Title.Caption := '办公用品|名称'; 2) 按钮式标题 设置 Column.Title.TitleButton 为 True 可以强制标题单元为按钮式。写 OnTITleBtnClick 事件来控制用户单击标题单元时的操作。 3) 标题行显示图片 实现图 2 中的购买人标题行显示效果。首先添加一个 imagelist 组件 img1 并在其中添加一 组 bmp,ico 格式的图片。然后将 DBGridEh 的 TitleImages 设置为 img1.最后在需要显示图 片的列标题的 imageindex 中设置需要显示的 img1 中图片的序号。按 F9 执行一下程序,是 不是很酷! 4) 标题行颜色(渐变)订制 ColumnDefValues 下的 Title 下的 color 属性设置标题行颜色 OptionEh 中的 dghFixed3D(固定为 3D 显示)要设置为 False Flat 设置为 TURE 为渐变色 5) 如根据不同状态在数据单元格中显示相应图片 如根据库存材料的不同状态在数据单元格中显示相应图片,具体设置如下: 添加一个 imagelist 组件 img1 并在其中添加一组 bmp,ico 格式的图片。然后将需要显示图片 的列的 imagelist 属性设置为 img1;在 keylist 属性中添加实际数据存储值,一行为一个值, 第 5 页
白波九道整理自用版 切记一定要与 imagelist 中图片顺序一一对应,否则会张冠李戴,面目全非。还可在 picklist 中添加提示信息,也要求是一行为一个值,并设 tooltip 为 true,那么,运行时当鼠标移动 到该数据单元格时在显示图片的同时还显示提示信息,怎么样,功能够强大吧!可使用空 格键或鼠标切换下一张图片,图片切换的同时也改变了实际存储数据值。也可通过 shift+ 空格或鼠标切换为上一张图片。这样就实现了上下两个方向图片切换。 6) 点标题排序 a) 简单的属性设置标题点击排序 在网上看了许多这方面的技术资料,啰索而麻烦,其实就这么几行搞定: 只要设置下面三个属性: ColumDefValues->Title->TitleButton 设为 TRUE sortlocal 设为 TRUE OptionsEH->dghautosortmarking 设为 TRUE 最后,一定要记得在 pas 文件的 uses 里引用上 ehlib***,我这里的是 ehlibCDS,网上也有 的是 ehlibBDE。我这里的情况是如果没有引用这个 ehlibCDS,在点击 dbgrideh 表头时出 现了小三角号,但就是不排序 b) 自动显示标题行的升降排序标志符(▽降序△升序)并做相应排序 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 第 6 页
白波九道整理自用版 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 型字段不可做上述设置,否则系统会提示错误。 另外,组件说明书中提到不需要编写代码即可自动排序,但是不编写代码自动排序方法我 还没找到,有知道的朋友烦请告诉我一声啊!让我也对程序代码进行“减肥”。 c) 在标题按钮下拉菜单中显示排序选项 如要出现以上效果,按以下设置即可: DBGridEh1.OptionsEh:=DBGridEh1.OptionsEh+[dghAutoSortMarking]; //先允许排序 DBGridEh1.STFilter.Visible:=True; DBGridEh1.STFilter.Location:=stflInTitleFilterEh;//stflUnderTitleFilterEh; DBGridEh1.STFilter.Local:=True; DBGridEh1.STFilter.InstantApply:=True; DBGridEh1.Columns[4].Title.TitleButton:=True; //允许单击标题栏 ------------------------------------------------------------------- d) 排序函数 procedure Sort(grid: TDBGridEh); begin 第 7 页
白波九道整理自用版 Grid.OptionsEh := Grid.OptionsEh + [dghAutoSortMarking]; Grid.ColumnDefValues.Title.TitleButton := True; Grid.OptionsEh := Grid.OptionsEh + [dghMultiSortMarking]; Grid.SortLocal:=True; end; e) 标题排序 procedure TForm1.DBGridEh1TitleClick(Column: TColumnEh); begin //点击 GridEh 标题排序 if (Column.Title.SortMarker = smNoneEh) or (Column.Title.SortMarker = smDownEh) then begin ADOQuery1.SORT := COLUMN.FIELDNAME; Column.Title.SortMarker := smUpEh end else begin ADOQuery1.SORT := COLUMN.FIELDNAME + ' DESC'; Column.Title.SortMarker := smDownEh end; end; f) 标题排序 procedure TPrintMai_frm.DBGridEh1TitleClick(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 DM.DataModule1.qry2.Sort := sortstring //dataset 为实际数据集变量名 except end; 第 8 页
分享到:
收藏