CxGrid使用方法.doc

上传人:小** 文档编号:3003130 上传时间:2020-06-20 格式:DOC 页数:51 大小:215.52KB
返回 下载 相关 举报
CxGrid使用方法.doc_第1页
第1页 / 共51页
CxGrid使用方法.doc_第2页
第2页 / 共51页
点击查看更多>>
资源描述

《CxGrid使用方法.doc》由会员分享,可在线阅读,更多相关《CxGrid使用方法.doc(51页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、.cxGrid的使用方法cxGrid功能强大,适合做企业级的复杂查询。非常方便。但是对其用法介绍的并不多,在此总结他人的使用经验和自己的一点小经验,供大家参考。()动态设置显示格式procedure SetDisplayFormat(ACtrlData: TClientDataSet; TbView: TcxGridDBTableView);var i: integer;begin if ACtrlData.RecordCount 0 then begin TNumericField(cxDBViewMaster.DataController.DataSet.Fieldsi).DisplayF

2、ormat := #,#0.000; Continue; end; if Pos(QUANTITY, UpperCase(cxDBViewMaster.DataController.DataSet.Fieldsi.FieldName) 0 then begin TNumericField(cxDBViewMaster.DataController.DataSet.Fieldsi).DisplayFormat := #,#0.000; Continue; end; if Pos(MONEY, UpperCase(cxDBViewMaster.DataController.DataSet.Fiel

3、dsi.FieldName) 0 then begin TNumericField(cxDBViewMaster.DataController.DataSet.Fieldsi).DisplayFormat := #,#0.00; Continue; end; end; end;end;最近在学习使用cxGrid,安装的版本是ExpressQuantumGrid Suite v5.10 我发现这个控件功能虽然强大,但是非常难用。 现在我手头就有几个问题还没解决: 1)主从模式下导出Excel中文会产生乱码,而且从表内容没有导出。 我不知道是不是因为我的字段名包括单引号的原因。 导出代码:Expo

4、rtGrid4ToExcel(FileName, cxGrid); 2)主从模式下通过按钮对从表添加/删除行,代码怎幺写。 附:单表添加/删除行的代码 procedure TFormAccount.cxButtonNewClick(Sender: TObject); begin Self.tvAccount.DataController.Append; Self.tvAccount.Columns0.Focused := True; cxGrid.SetFocus; end; procedure TFormAccount.cxButtonDeleteClick(Sender: TObject)

5、; begin if Self.tvAccount.DataController.RowCount = 0 then Exit; if Application.MessageBox(确认删除当前记录?, 确认删除, MB_YesNo + MB_IconQuestion) = IDNO then Exit; Self.tvAccount.DataController.DeleteFocused; end; 3)动态创建主从结构出错(Compiler没错,运行时出现系统错误0000000018), 我使用了二个ADOStoreProcedure作主从表 代码如下: var Level: TcxGr

6、idLevel; GridView: TcxGridDBTableView; begin Level := cxGrid1.Levels0.Add; GridView := TcxGridDBTableView(cxGrid1.CreateView(TcxGridDBTableView); GridView.DataController.DataSource := Self.dsDetail; GridView.DataController.KeyFieldNames := PurchOrderID;POLineNbr;PromiseDate;ReceiverDate; GridView.Da

7、taController.MasterKeyFieldNames := VendorID; GridView.DataController.DetailKeyFieldNames := VendorID; GridView.DataController.DataModeController.SmartRefresh := True; GridView.OptionsCustomize.ColumnHiding := True; GridView.OptionsCustomize.ColumnsQuickCustomization := True; GridView.OptionsData.De

8、leting := False; GridView.OptionsData.Inserting := False; GridView.OptionsView.Indicator := True; Level.GridView := GridView; GridView := TcxGridDBTableView(cxGrid1.Levels0.GridView); GridView.DataController.KeyFieldNames := VendorID; GridView.OptionsView.GroupByBox := False; /显示主表内容 tvResult.BeginU

9、pdate; tvResult.ClearItems; tvResult.DataController.CreateAllItems; tvResult.EndUpdate; /显示明细表内容 GridView := TcxGridDBTableView(cxGrid1.Levels0.Items0.GridView); GridView.BeginUpdate; GridView.ClearItems; GridView.DataController.CreateAllItems; GridView.DataController.Refresh; GridView.EndUpdate; en

10、d; 此楼回复Re: 小技巧:用代码展开/收缩主从结构 Self.tvDepartment.ViewData.Expand(True); Self.tvDepartment.ViewData.Collaspe(True); 注:tvDepartment为主表对应的TableView此楼回复Re: 你说的这几个问题我也遇到过。 第一个问题是编码的问题,修改了其中关于编码的函数,OK. 第二个问题在cxGrid的社区可以找到解答,但从表必须满足某种条件,例如关键字排序。 第三个问题的解决办法,你可以尝试在动态创建的代码前后加上: grid.beginupdate; . grid.endupdate

11、 来解决。此楼回复Re: 没用过 不要经常使用三方控件此楼回复Re: to tttk(网络芝麻): 第一个问题:如何修改啊,贴出代码 第二个问题:没搜到啊 第三个问题:试一下再说此楼回复Re: 不要经常使用三方控件 = 我感觉不用cxGrid的话,没必要用Delphi了,呵呵此楼回复Re: 楼上这话是不是有点问题?DELPHI能做得事情很多很多,难道非要用CXGRID?CXGRID不是用DELPHI做出来得?此楼回复Re: 没用过.此楼回复Re: 回复人: zxkid(没有人会像我这样.) ( ) 信誉:101 2006-01-06 16:58:00 得分: 0 不要经常使用三方控件 = 我感

12、觉不用cxGrid的话,没必要用Delphi了,呵呵 * 楼主乃天人也!此楼回复Re: 呵呵此楼回复Re: cxGrid比较不错,我也使用过导出到Excel,没有遇到你说的乱码 主从表也没有问题的,其实跟单表操作还不是一回事此楼回复Re: up此楼回复Re: 没用过cxGrid,以后考虑此楼回复Re: 楼主乃天人也! = Delphi下有cxGrid, .NET下有XtraGrid, 它们都是同一公司出的。 迟早都会转到.NET,所以。此楼回复Re: 路过此楼回复Re: 用过,挺好,只会使用最简单的。此楼回复Re: 发一个邮件给我,我把解决乱码后的源代码发一分给你,放到你的项目文件夹下即可。

13、此楼回复Re: 第二个问题:https:/ 谢谢tttk(网络芝麻) 第二个问题:我现在直接让用户用导航条的删除/添加按钮了。根据你给的网址上的内容我知道大概该怎幺写了,有空再试试。 第一个问题:不光是乱码问题,还有从表内容没导出的问题。 只有一个表的话是不会出现乱码的。 第三个问题:还没来得及试。此楼回复Re: 第一个问题:看了一下帮助,原来cxGrid不支持主从表的导出,只能导出主表(顶层表)的内容。晕此楼回复Re: 贴一些小技巧,希望与各位使用cxGrid的朋友共同交流 各位有什幺好个技巧也可以贴出来: 技巧二:在内置右键菜单的后面增加菜单项 首先应在Form上加一个cxGridPopu

14、pMenu控件 以启用右键菜单 UseBuildInPopupMenus设为True procedure TFormItemList.FormCreate(Sender: TObject); var AMenu: TComponent; FMenuItem, FSubMenuItem: TMenuItem; begin AMenu := nil; if cxGridPopupMenu.BuiltInPopupMenus.Count = 0 then Exit; AMenu := cxGridPopupMenu.BuiltInPopupMenus0.PopupMenu; /第一个内置右键菜单(表

15、头菜单) if Assigned(AMenu) and AMenu.InheritsFrom(TPopupMenu) then begin TPopupMenu(AMenu).AutoHotkeys := maManual; /手动热键 /- FMenuItem := TMenuItem.Create(Self); FMenuItem.Caption := -; FMenuItem.Name := miLineForGroup; TPopupMenu(AMenu).Items.Add(FMenuItem); /展开所有组 FMenuItem := TMenuItem.Create(Self);

16、 FMenuItem.Name := miExpandAllGroup; FMenuItem.Caption := 展开所有组(&X); FMenuItem.OnClick := miExpandAllGroupClick; TPopupMenu(AMenu).Items.Add(FMenuItem); /收缩所有组 FMenuItem := TMenuItem.Create(Self); FMenuItem.Name := miCollapseAllGroup; FMenuItem.Caption := 收缩所有组(&O); FMenuItem.OnClick := miCollapseAl

17、lGroupClick; TPopupMenu(AMenu).Items.Add(FMenuItem); /- FMenuItem := TMenuItem.Create(Self); FMenuItem.Caption := -; TPopupMenu(AMenu).Items.Add(FMenuItem); /过滤面板 FMenuItem := TMenuItem.Create(Self); FMenuItem.Name := miFilterPanel; FMenuItem.Caption := 过滤面板(&P); /自动显示 FSubMenuItem := TMenuItem.Crea

18、te(Self); FSubMenuItem.Name := miFilterPanelAuto; FSubMenuItem.Caption := 自动(&A); FSubMenuItem.RadioItem := True; FSubMenuItem.GroupIndex := 5; /指定同一组 FSubMenuItem.Checked := True; FSubMenuItem.OnClick := miFilterPanelClick; FMenuItem.Add(FSubMenuItem); /加入二级子菜单 /总是显示 FSubMenuItem := TMenuItem.Creat

19、e(Self); FSubMenuItem.Name := miFilterPanelAlways; FSubMenuItem.Caption := 总是显示(&W); FSubMenuItem.RadioItem := True; FSubMenuItem.GroupIndex := 5; FSubMenuItem.OnClick := miFilterPanelClick; FMenuItem.Add(FSubMenuItem); /从不显示 FSubMenuItem := TMenuItem.Create(Self); FSubMenuItem.Name := miFilterPanel

20、Nerver; FSubMenuItem.Caption := 从不显示(&N); FSubMenuItem.RadioItem := True; FSubMenuItem.GroupIndex := 5; FSubMenuItem.OnClick := miFilterPanelClick; FMenuItem.Add(FSubMenuItem); TPopupMenu(AMenu).Items.Add(FMenuItem); /自定义过滤 FMenuItem := TMenuItem.Create(Self); FMenuItem.Name := miCustomFilter; FMenu

21、Item.Caption := 自定义过滤(&M); FMenuItem.OnClick := miCustomFilterClick; TPopupMenu(AMenu).Items.Add(FMenuItem); /过滤管理器 FMenuItem := TMenuItem.Create(Self); FMenuItem.Name := miFilterBuilder; TPopupMenu(AMenu).Images.AddImage(FormMain.ImageListExtend, 44); /添加图标图像 FMenuItem.ImageIndex := TPopupMenu(AMen

22、u).Images.Count - 1; /指定图标序号 FMenuItem.Caption := 过滤管理器; FMenuItem.OnClick := Self.miFilterBuilderClick; TPopupMenu(AMenu).Items.Add(FMenuItem); /- FMenuItem := TMenuItem.Create(Self); FMenuItem.Caption := -; TPopupMenu(AMenu).Items.Add(FMenuItem); /导出 FMenuItem := TMenuItem.Create(Self); FMenuItem.

23、Name := miExport; TPopupMenu(AMenu).Images.AddImage(FormMain.ImageListExtend, 37); FMenuItem.ImageIndex := TPopupMenu(AMenu).Images.Count - 1; FMenuItem.Caption := 导出(&E); FMenuItem.OnClick := Self.miExportClick; TPopupMenu(AMenu).Items.Add(FMenuItem); /打印 FMenuItem := TMenuItem.Create(Self); FMenuI

24、tem.Name := miPrint; FMenuItem.Caption := 打印(&P); TPopupMenu(AMenu).Images.AddImage(FormMain.ImageListExtend, 14); FMenuItem.ImageIndex := TPopupMenu(AMenu).Images.Count - 1; FMenuItem.OnClick := Self.miPrintClick; TPopupMenu(AMenu).Items.Add(FMenuItem); end; end; procedure TFormItemList.miExportCli

25、ck(Sender: TObject); var FileName, FileExt, msg: String; begin if Self.aqyQuery.IsEmpty then begin msg := 没有导出数据.; Application.MessageBox(PChar(msg), PChar(Application.Title), MB_OK or MB_IconWarning); Exit; end; Self.SaveDialogExport.Filter := Excel文件 (*.xls)|*.xls|XML文件 (*.xml)|*.xml + |文本文件 (*.tx

26、t)|*.txt|网页文件 (*.html)|*.html; Self.SaveDialogExport.Title := 导出为; if not Self.SaveDialogExport.Execute then Exit; FileName := Self.SaveDialogExport.FileName; FileExt := LowerCase(ExtractFileExt(FileName); if FileExt = .xls then ExportGrid4ToExcel(FileName, Self.cxGrid1) else if FileExt = .xml then

27、ExportGrid4ToXML(FileName, Self.cxGrid1) else if FileExt = .txt then ExportGrid4ToText(FileName, Self.cxGrid1) else if FileExt = .html then ExportGrid4ToHTML(FileName, Self.cxGrid1) else begin msg := 不支持的导出文件类型.; Application.MessageBox(PChar(msg), PChar(Application.Title), MB_OK or MB_IconError); Ex

28、it; end; msg := 导出完成.; Application.MessageBox(PChar(msg), PChar(Application.Title), MB_OK or MB_IconInformation); end; procedure TFormItemList.miPrintClick(Sender: TObject); begin /打印 Self.dxComponentPrinter.Preview(True, Self.dxComponentPrinterLink1); end; procedure TFormItemList.cxGridPopupMenuPop

29、up(ASenderMenu: TComponent; AHitTest: TcxCustomGridHitTest; X, Y: Integer; var AllowPopup: Boolean); begin if GetHitTypeByHitCode(AHitTest.HitTestCode) = gvhtColumnHeader then /右击列标题时 begin /if tvResult.DataController.Groups.GroupingItemCount 0 then if tvResult.GroupedColumnCount 0 then /有分组时显示 begin TMenuItem(Self.FindComponent(miLineForGroup).Visible := True; TMenuItem(Self.FindC

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com