在 cxgrid 里的 cxgridpopopmenu 里加入导出功能。

本文介绍如何为cxGrid组件添加展开/折叠所有分组、导出数据及打印等功能。通过自定义菜单项,实现了数据导出到Excel、XML、文本及HTML格式,并提供了打印表格的菜单选项(未实现)。此外,还定义了相应的资源字符串。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因为使用这个工具很方便,但这个菜单里没有导出选项,觉得是一。。。
于是,加上之。

在cxGridHeaderPopupMenuItems.pas中。第199行开始,加入如下内容,定义菜单项

 1ExpandedBlockStart.gifContractedBlock.gif/**//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 2None.gif  TcxGridExpandAllGroup = class(TcxGridHeaderPopupMenuOperation)
 3None.gif  protected
 4None.gif    procedure Execute(Sender: TObject); override;
 5None.gif    function GetEnabled: Boolean; override;
 6None.gif    function GetImageResourceName: stringoverride;
 7None.gif  public
 8None.gif    constructor Create; override;
 9None.gif  end;
10None.gif
11None.gif   TcxGridCollapseAllGroup = class(TcxGridHeaderPopupMenuOperation)
12None.gif  protected
13None.gif    procedure Execute(Sender: TObject); override;
14None.gif    function GetEnabled: Boolean; override;
15None.gif  public
16None.gif    constructor Create; override;
17None.gif  end;
18None.gif
19None.gif  TcxGridExport = class(TcxGridHeaderPopupMenuOperation)
20None.gif  protected
21None.gif    procedure Execute(Sender: TObject); override;
22None.gif    function GetImageResourceName: stringoverride;
23None.gif  public
24None.gif    constructor Create; override;
25None.gif  end;
26None.gif
27None.gif  TcxGridPrint = class(TcxGridHeaderPopupMenuOperation)
28None.gif  protected
29None.gif    procedure Execute(Sender: TObject); override;
30None.gif  public
31None.gif    constructor Create; override;
32None.gif  end;
33None.gif
34ExpandedBlockStart.gifContractedBlock.gif/**///////////////////////////////////////////////////////////////////////////////////////////////
35None.gif
36None.gif


在 procedure TcxGridHeaderPopupMenuOperations.AddItems; 过程中,加入新的菜单项

None.gifprocedure TcxGridHeaderPopupMenuOperations.AddItems;
None.gifbegin
None.gif  AddItem(TcxGridSortColumnAsc);
None.gif   dot.gif.
None.gif  AddItem(TcxGridBestFitAllColumns).BeginGroup :
= True;
None.gif  AddItem(TcxGridExpandAllGroup).BeginGroup:
=true;
None.gif  AddItem(TcxGridCollapseAllGroup);
None.gif  AddItem(TcxGridExport);
None.gif  AddItem(TcxGridPrint);
None.gifend;
None.gif


 

接下来是实现:

ExpandedBlockStart.gifContractedBlock.gif/**/////////////////////////////////////////////////////////////////////////////////
InBlock.gif
///
InBlock.gif
///
ExpandedBlockEnd.gif
///

ExpandedBlockStart.gifContractedBlock.gifdot.gif{TcxGridExpandAllGroup}
None.gifprocedure TcxGridExpandAllGroup.Execute(Sender: TObject);
None.gifbegin
None.gif  HitGridView.DataController.Groups.FullExpand;
None.gifend;
None.gif
None.giffunction TcxGridExpandAllGroup.GetEnabled;
None.gifbegin
None.gif  Result:
= Boolean (HitGridView.DataController.GridView.GroupedItemCount );
None.gifend;
None.gif
None.gifconstructor TcxGridExpandAllGroup.Create;
None.gifbegin
None.gif  inherited;
None.gif  ResCaption :
= @cxSGridExpandAllGroup;
None.gifend;
None.gif
None.giffunction TcxGridExpandAllGroup.GetImageResourceName;
None.gifbegin
None.gif  Result :
= AImageName + '21';
None.gifend;
None.gif
None.gif
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{TcxGridCollapseAllGroup}
None.gifprocedure TcxGridCollapseAllGroup.Execute(Sender: TObject);
None.gifbegin
None.gif  HitGridView.DataController.Groups.FullCollapse;
None.gifend;
None.gif
None.giffunction TcxGridCollapseAllGroup.GetEnabled;
None.gifbegin
None.gif  Result:
= Boolean (HitGridView.DataController.GridView.GroupedItemCount );
None.gifend;
None.gif
None.gifconstructor TcxGridCollapseAllGroup.Create;
None.gifbegin
None.gif  inherited
None.gif  ResCaption :
= @cxSGridCollapseAllGroup;
None.gif  self.ImageIndex:
=99;
None.gifend;
None.gif
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{TcxGridExport}
None.gifprocedure TcxGridExport.Execute(Sender: TObject);
None.gifvar
None.gif  SFD:TSaveDialog;
None.gif  FileName,FileExt:String;
None.gifbegin
None.gif  SFD:
=TSaveDialog.Create(nil);
None.gif  SFD.Filter:
='Excel文件 (*.xls)|*.xls|XML文件 (*.xml)|*.xml|文本文件 (*.txt)|*.txt|网页文件 (*.html)|*.html';
None.gif  SFD.Title:
='导出为';
None.gif  SFD.DefaultExt:
='.XLS';
None.gif  SFD.Options:
=[ofOverwritePrompt, ofEnableSizing];
None.gif
None.gif  
if not SFD.Execute then exit;
None.gif  FileName:
=SFD.FileName;
None.gif  FileExt:
=UpperCase(ExtractFileExt(FileName));
None.gif
None.gif  
if FileExt='.XLS' then
None.gif    ExportGridToExcel(FileName,Self.GridPopupMenu.Grid)
None.gif    
else if FileExt='.XML' then
None.gif         ExportGridToXML(FileName,self.GridPopupMenu.Grid)
None.gif         
else if FileExt='.TXT' then
None.gif              ExportGridToText(FileName,Self.GridPopupMenu.Grid)
None.gif              
else if FileExt='.HTML' then
None.gif                   ExportGridToHTML(FileName,Self.GridPopupMenu.Grid)
None.gif                   
else
None.gif                   begin
None.gif                      Application.MessageBox(
'不支持的导出格式''xx');
None.gif                      Exit;
None.gif                   end;
None.gif   SFD.Free;                
None.gifend;
None.gif
None.gifconstructor TcxGridExport.Create;
None.gifbegin
None.gif  inherited Create;
None.gif  ResCaption :
= @cxSGridExport;
None.gifend;
None.gif
None.giffunction TcxGridExport.GetImageResourceName;
None.gifbegin
None.gif  Result :
= AImageName + '23';
None.gifend;
None.gif
None.gif
None.gifprocedure TcxGridPrint.Execute(Sender: TObject);
None.gifbegin
None.gif
// todo:Addcode
None.gif
end;
None.gif
None.gifconstructor TcxGridPrint.Create;
None.gifbegin
None.gif  inherited
None.gif  ResCaption:
=@cxSGridPrint;
None.gif  Self.ImageIndex:
=99;
None.gifend;

 

最后还要在cxGridPopupMenuConsts.pas中定义资源

None.gif cxSGridExpandAllGroup = '展开全部分组';
None.gif  cxSGridCollapseAllGroup 
= '收起所有分组';
None.gif  cxSGridExport 
= '导出所有数据';
None.gif  cxSGridPrint 
= '打印表格';


还有一点要声明一下,打印表格的代码没有实现,嘿嘿。

转载于:https://www.cnblogs.com/qufo/archive/2007/08/06/844979.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值