logo资料库

DELPHI 表格控件DBGridEh史上最全使用资料(101页).pdf

第1页 / 共101页
第2页 / 共101页
第3页 / 共101页
第4页 / 共101页
第5页 / 共101页
第6页 / 共101页
第7页 / 共101页
第8页 / 共101页
资料共101页,剩余部分请下载后查看
白波九道整理自用版 DELPHI 表格控件 DBGridEh 使用详解 ----白波九道----- (博客 http://scmyluo.blog.163.com/) 第 1 页
白波九道整理自用版 一、 DBGridEh (增强型表格组件)功能详解.....................................................................4 二、 应用实例 ..........................................................................................................................5 1. 定制标题行 ......................................................................................................................5 1) 制作复杂标题行.......................................................................................................5 2) 按钮式标题 ..............................................................................................................5 3) 标题行显示图片.......................................................................................................5 4) 如根据不同状态在数据单元格中显示相应图片...................................................5 5) 自动显示标题行的升降排序标志符(▽降序△升序)并做相应排序...............6 6) 点 dbgrideh 标题排序 ..............................................................................................7 7) 在 DBGridEH 中怎样实现多重排序(标题出现 0123 等排列序号)?................11 8) 让 dbgrid 显示序号................................................................................................11 2. 外观布局 ........................................................................................................................12 1) 根据不同字段值显示相应的小图片.....................................................................12 2) 显示检查框(checkbox)外观 .............................................................................12 3) 显示单、多列下拉列表.........................................................................................12 4) 显示日历下拉列表.................................................................................................13 5) 3D 或平面外观效果...............................................................................................13 6) 行头和列头的启用关闭.........................................................................................13 7) DBGrid 如何实现透明效果?.................................................................................13 8) 滚动条的各种应用.................................................................................................16 9) 数据行高 ................................................................................................................19 10) DBGrid 设置 Rowheight 后如何将单元格内容纵向和垂直都居中?..............19 11) 设置 DBGridEH 自适应列宽的最好方法.........................................................20 12) Ehlib 的 DBGridEh 首列加序号........................................................................21 13) 分行分列、单元格的颜色设置.........................................................................23 14) 点击不同单元格列,执行不同的动作.............................................................27 15) 下拉式计算器.....................................................................................................28 16) 鼠标移到某个单元格,指针形状改变.............................................................28 17) 自动填充网格列宽到网格客户区.....................................................................29 18) 从注册表或 ini 文件中保存或恢复网格和列的层次。...................................29 3. 编辑功能 ........................................................................................................................29 1) 多选 ........................................................................................................................29 2) 文本多行显示.........................................................................................................30 3) 显示备注字段.........................................................................................................30 4) 如何让 dbgrideh1 显示数据时只显示两位小数...................................................30 5) 获得当前 DBGridEh 表中单元格的序号 .............................................................30 6) 怎样在 dbgridEh 和 Edit 中显示金额的千分号 ...................................................30 7) end; 请问怎么才能使 DBGridEh 不滚动就能提交数据?...................................32 8) 我怎么把 dbgrid 里的数据一次插入到数据库呢 ................................................32 9) 在 DBGrid 中可选中行而又可进入编辑状态......................................................32 10) 修正 DBGrideh 丢失焦点时自动关闭输入法的问题 ......................................35 11) DBGRIDEH 选定多行删除怎么实现...............................................................36 12) DBGrid 滚动表格的代码...................................................................................37 4. 统计功能 ........................................................................................................................37 第 2 页
白波九道整理自用版 1) 页脚合计 ................................................................................................................37 2) 定制表格底部(footer)区域的汇总统计行 .......................................................38 3) TDBSumList 说明..................................................................................................38 4) 如何工作以及为什么有时 SumList 的集合值计算不正确? .............................39 5) dbgrideh 列求和 .....................................................................................................39 5. 数据功能 ........................................................................................................................40 1) 查找字段 点击某列值的下拉按纽弹出一个从数据库取值下拉列表...............40 2) 使用 DBGridEh 自动过滤实现方法 .....................................................................40 3) 使用 DBGridEh 自动过滤实现方法 2..................................................................41 4) DBGridEh 控件中使用过滤功能 (适用 ehlib 5.2 ehlib 5.3)................................42 5) 支持模糊查询.........................................................................................................43 6) ehlib4.4.50 中支持模糊匹配的修改方法..............................................................44 7) EhLib 5.0 Build 5.0.13 的过滤字串都是模糊过滤修改.......................................45 8) 滚动条滚动时选择不变,还有自动过滤功能的实现.........................................45 9) 增量搜索 ................................................................................................................46 10) ehlib 总是按两次 ctrl+f 才出来查找框,怎么办?.........................................46 11) 如何改良 dbgrideh 的文字过滤 ........................................................................46 12) 改进 DBGrideh 表头点击自动排序,实现双击状态轮流 .................................47 13) 改良 Ehlib 的排序功能,加快排序速度.............................................................49 14) 在 DbGridEh 中显示 TreeView 效果................................................................50 15) DBGridEh-KeyList 、PickList............................................................................51 16) 主从表设置 ........................................................................................................53 17) 在 DbGridEh 中显示表中表..............................................................................55 6. 输入/输出 .......................................................................................................................56 1) 导入导出数据.........................................................................................................56 2) 从多种格式导入/导出数据到 TDBGridEh...........................................................57 3) DBGRID 生成 EXCEL 报表 .................................................................................57 4) 使用 TPrintDBGridEh 组件 .................................................................................61 5) 打印时确定 Ehlib 定义的报表表头颜色?............................................................61 6) Ehlib 中的 PrintDBGridEh 如何印页码,即第几页共几页 ...................................62 7) 怎么让 PrintDBGridEh 只打印 DbGridEh 中指定的列.......................................62 8) 怎样进行横向打印 / 打印预览?........................................................................62 7. 将存在的 DBGrid 组件转换为 DBGridEh 组件...........................................................62 EhLib 安装问题 .............................................................................................................64 1. EhLib 安装步骤 .............................................................................................................64 2. EhLib 安装问题(dbsumlst.dcu 出错)..........................................................................64 3. 安装提示找不到.BPL 文件 ...........................................................................................65 Delphi 下的优秀表格(Grid)显示控件........................................................................65 三、 四、 1. NextGrid.........................................................................................................................65 2. TopGrid 3.01...................................................................................................................65 3. XLGrid............................................................................................................................66 4. DevExpress ExpressQuantumGrid.................................................................................66 5. TMS Grid Pack...............................................................................................................68 6. EhLib..............................................................................................................................71 第 3 页
白波九道整理自用版 7. ProfGrid..........................................................................................................................71 8. EasyGrid.........................................................................................................................71 五、 delphi 中配置文件的使用(*.ini).........................................................................71 六、 窗口动画效果 Animatewindow 应用...........................................................................72 七、 Delphi Excel to Sql Server..............................................................................................73 八、 Delphi 控制 Excel 的经验如下:..................................................................................76 一、 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 属性,当移动鼠标到该单元格时,可以显示单 元格容纳不下的文本内容. 第 4 页
白波九道整理自用版 ● 将组件中数据导入/导出到 Text, Csv, HTML, RTF, XLS 和内部数据等多种格式的文件 中. 二、 应用实例 Enlib3.0 组件包安装成功后,在系统的组件面板中会显示“enlib”组件包标签,添加 DBGridEh 到窗体的方法与其它组件一样。在窗体中添加该组件后,请跟我一起来实现图 2 的一些特殊效果,具体属性设置请参考属性表的说明。 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) 如根据不同状态在数据单元格中显示相应图片 如根据库存材料的不同状态在数据单元格中显示相应图片,具体设置如下: 添加一个 imagelist 组件 img1 并在其中添加一组 bmp,ico 格式的图片。然后将需要显示图片 的列的 imagelist 属性设置为 img1;在 keylist 属性中添加实际数据存储值,一行为一个值, 第 5 页
白波九道整理自用版 切记一定要与 imagelist 中图片顺序一一对应,否则会张冠李戴,面目全非。还可在 picklist 中添加提示信息,也要求是一行为一个值,并设 tooltip 为 true,那么,运行时当鼠标移动 到该数据单元格时在显示图片的同时还显示提示信息,怎么样,功能够强大吧!可使用空 格键或鼠标切换下一张图片,图片切换的同时也改变了实际存储数据值。也可通过 shift+ 空格或鼠标切换为上一张图片。这样就实现了上下两个方向图片切换。 5) 自动显示标题行的升降排序标志符(▽降序△升序)并做相应排序 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; 第 6 页
白波九道整理自用版 end; end; 切记 lookup 型字段不可做上述设置,否则系统会提示错误。 另外,组件说明书中提到不需要编写代码即可自动排序,但是不编写代码自动排序方法我 还没找到,有知道的朋友烦请告诉我一声啊!让我也对程序代码进行“减肥”。 3.2 定制表格底部(footer)区域的汇总统计行 DBGridEh 组件可以在表格底部显示汇总行,如记录数合计、列字段累加和等信息。在 FooterRowCount 中设置底部显示的行数;然后在 Footers 编辑器中添加一个或多个显示列, 显示列可以是字段值累加和、记录数合计、字段值或静态文件等集合类型,可以在设计时 在 ValueType 属性中设置,也可在运行时通过设置 Footers[i].ValueType 指定其类型。其 含义见下表: 切记设置 DBGridEh.SumList.Active 为 True,才会进行汇总统计运算。需注意的是,如显 示类型为不是当前列的累加和,则需在 fieldname 属性中指定汇总列,其它类型则无此要 求。 6) 点 dbgrideh 标题排序 在网上看了许多这方面的技术资料,啰索而麻烦,其实就这么几行搞定: procedure Sort(grid: TDBGridEh); begin Grid.OptionsEh := Grid.OptionsEh + [dghAutoSortMarking]; Grid.ColumnDefValues.Title.TitleButton := True; Grid.OptionsEh := Grid.OptionsEh + [dghMultiSortMarking]; Grid.SortLocal:=True; end; //---------------------------------------------------------------------------- ---- // 功能:设定 DbGridEh 合计行信息 // 参数: pDbGrid:TDBGridEh; // pcFields : string ; 字段列表,字段用逗号分隔 // pvtType : TFooterValueType ; 统计类型 TFooterValueType = (fvtNon, fvtSum, fvtAvg, fvtCount, fvtFieldValue, fvtStaticText); // 引用:StrToStringList // 例如:DbGridEhFoot( DbGridEh1, 'Number,Sum', fvtSum ); 设定数量和金额字段为 合计统计 //---------------------------------------------------------------------------- ---- Procedure DbGridEhFoot( pDbGrid:TDBGridEh; pcFields: string; pvtType : TFooterValueType ); 第 7 页
白波九道整理自用版 var nFldLoop : integer ; cFieldName : string ; tmpFldList : TStrings ; begin pDbGrid.FooterRowCount := 1; // 指定网格尾部统计行行数 pDbGrid.SumList.Active := true; // 激活统计 pDbGrid.FooterColor := clBtnFace ; // 指定统计行颜色 tmpFldList := TStringList.Create ; StrToStringList( Uppercase(pcFields),',',tmpFldList ); // 将字符串转换为串列表 For nFldLoop := 0 to pDbGrid.Columns.Count -1 do begin cFieldName := pDbGrid.Columns[nFldLoop].FieldName ; // 网格列字段名 if tmpFldList.IndexOf( uppercase( cFieldName ) ) >= 0 then begin pDbGrid.Columns[nFldLoop].Footer.ValueType := pvtType ; // 统计类型 end; end ; tmpFldList.Free ; end; //---------------------------------------------------------------------------- ---- // 功能:将指定分隔符分隔的字符串转换为字符串列表。 // 此函数在需要将 // 参数: // pcString : string; 字符串 // pcChar : string; 分隔符 // pDesList : TStringList 字符串列表 // 例如: // var tmpFldList : TStrings ; // begin // tmpFldList := TStringList.Create ; // StrToStringList( Uppercase(pcFields), ',' , tmpFldList ); // ...... // tmpFldList.Free ; // end; //---------------------------------------------------------------------------- ---- 第 8 页
分享到:
收藏