DxDbGridDbGridEh表格使用及导出Excel
分类: Delphi 2011-05-16 09:47 110人阅读 评论(0) 收藏 举报
前言:二者都是非常不错的第三方表格控件,都可实现多表头的表格及分组汇总功能;在导出 Excel 方面,个人觉得 DxDbGrid 做的比 DbGridEh 出,几乎是 Grid 原样导出, DbGridEh 导出表格模式的单元格与 Grid 显示有所出入。
一、所用版本及安装:
1 、版本: DevExQuantumGrid v3.22 Pro for D7 EhLib 5.2.84
2 、安装: DevExQuantumGrid 直接 OK EhLib Delphi7 的安装稍微啰嗦点,具体步骤参考 或如下步骤:
(1).  EhLib 5.2.84 解压缩到目标目录。
(2).  打开 Delphi  7 ,将 EhLib /Delphi7 子目录加到 Delphi Library  path
( 菜单操作路径为: Tools|Environment  Library|Library  path)
(3).  EhLib 目标安装目录中的 common DataService 子目录的文件移动到 EhLib /Delphi7 子目录中。
(4).  Delphi  7 中打开 EhLib70.dpk ,编译,但不要安装。
(5).  Delphi  7 中打开 DclEhLib70.dpk ,编译并安装。
(6).  组件面板中出现一个 EhLib 的组件页。
(7).  打开附带的 DEMOS ,编译并运行,测试安装成功。
 
二、使用 DxDbGrid
1 、窗体拖入 dxDBGrid1 ADOConnection1 ADOQuery1 DataSource1 Button1     SaveDialog1 ,然后完成数据的链接及相关控件关联,如何操作,你应该懂的;接下来完成如下图所示的一个表格:
2 、双击 dxDBGrid1 ,在 Bands 栏增加 TdxTreeListBand 并填写 Caption ,注意要将 dxDBGrid1 ShowBands 属性设置为 True 才能显示 Bands 栏;同样双击 dxDBGrid1
Columns 栏,添加多个 dxGridColumn (根据需要选择不同的类型)并使其与数据库字段形成关联,涉及如下几个属性, BandIndex 选择对应的 Band 从而形成二级表头, Caption FieldName HeaderAlignment width 等,如此完成了基本的表格设计,如果喜欢表头平滑更改 LookAndFeel 属性为 lfFlat 即可。
      如果增加排序功能, edgoAutoSort(True) edgoLoadAllRecords(True) KeyField (数据库表主键字段)。
      如果需要 Footer 汇总,首先设置属性 showSummeryFooter True ,然后选择需要汇总的 dxGridColum 根据需要更改其 summaryFooterType 属性如 cstSum (或 cstAvg ),如需要显示汉字,可设置 SummaryFooterFormat 如(平均年龄= 0.00 )。
      导出 Excel 可直接利用 dxDbGrid SaveToXLS 方法,具体代码参考如下:
view plaincopy to clipboardprint?
1. unit Unit1; 
2. interface 
3. uses 
4.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
5.   Dialogs, ComCtrls, StdCtrls, dxExEdtr, dxCntner, dxTL, dxDBCtrl, dxDBGrid, 
6.   DB, ADODB, dxDBTLCl, dxGrClms; 
7. type 
8.   TSaveMethod = procedure (const FileName: String; ASaveAll: Boolean) of object;   
9. type 
10.   TForm1 = class(TForm) 
11.     GroupBox1: TGroupBox; 
12.     GroupBox2: TGroupBox; 
13.     dxDBGrid1: TdxDBGrid; 
14.     ADOConnection1: TADOConnection; 
15.     ADOQuery1: TADOQuery; 
16.     DataSource1: TDataSource; 
17.     dxDBGrid1Column2: TdxDBGridColumn; 
18.     dxDBGrid1Column1: TdxDBGridMaskColumn; 
19.     dxDBGrid1Column3: TdxDBGridColumn; 
20.     dxDBGrid1Column4: TdxDBGridCheckColumn; 
21.     dxDBGrid1Column5: TdxDBGridDateColumn; 
22.     dxDBGrid1Column6: TdxDBGridColumn; 
23.     dxDBGrid1Column7: TdxDBGridColumn; 
24.     dxDBGrid1Column8: TdxDBGridColumn; 
25.     Button1: TButton; 
26.     SaveDialog1: TSaveDialog; 
27.     procedure Button1Click(Sender: TObject); 
28.   private 
29.     procedure Save(ADefaultExt, AFilter, AFileName: String; AMethod: TSaveMethod); 
30.   public 
31.     { Public declarations } 
32.   end
33. var 
34.   Form1: TForm1; 
35. implementation 
36. {$R *.dfm} 
37. procedure TForm1.Save(ADefaultExt, AFilter, AFileName: String; AMethod: TSaveMethod); 
38. begin 
39.   with SaveDialog1 do 
40.   begin 
41.     DefaultExt := ADefaultExt; 
42.     Filter := AFilter; 
43.     FileName := AFileName; 
44.     if Execute then 
45.       AMethod(FileName, true); 
46.   end
47. end
48. procedure TForm1.Button1Click(Sender: TObject); 
49. begin 
50.   Save('xls''Microsoft Excel 4.0 Worksheet (*.xls)|*.xls''ExpGrid.xls', dxDBGrid1.SaveToXLS); 
51. end
52. end
 
三、使用 DbGridEh
1 、窗体拖入 DBGridEh1 ADOConnection1 ADOQuery1 DataSource1 Button1     SaveDialog1 ,然后完成数据的链接及相关控件关联;接下来完成如下图所示的一个表格:
 
 
2 、双击 DbgridEh1 ,新增多个 Columns 并使之与数据字段对应, DbgridEh 设计多表头的关键在于 Culumn 属性 Title 的设定,如上表格“编号”、“名称”需要将 Title->Caption 分别设置为“地址 | 编号”、“地址 | 名称”,原来起作用的关键在于“ | ”这个分隔符;当然还需要设置其他的属性, FieldName 对应显示的字段,如果需要 Footer ,则在 Column Footer 属性完成相关设置,如上表格,设置“编号”列的 Footer- Value 为“合计:”, ValueType 为“ fvtStaticText ”;“名称”列的 Footer- FieldName 为“ id delphi app ( 此处只是为了将第一列 ID 的和显示在第二列姓名的汇总栏,只为测试没有什么实际意义 ) ValueType 为“ fvtSum ”。
      导出 Excel ,以下导出 Excel 函数代码可以进一步完善,日后再说吧,来活了!发现研究一个东西需要时间,整理研究成果的更长。
view plaincopy to clipboardprint?
1. unit Unit1; 
2. interface 
3. uses 
4.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。