delphi控件cxGrid用法大全.doc_第1页
delphi控件cxGrid用法大全.doc_第2页
delphi控件cxGrid用法大全.doc_第3页
delphi控件cxGrid用法大全.doc_第4页
delphi控件cxGrid用法大全.doc_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

delphi中cxGrid使用汇总(一)2011-10-27 23:26:16|分类:delphi xe2|字号订阅1. 去掉cxGrid中台头的Box解决:在tableview1的ptionsview的groupbybox=false;*2统计功能解决:(1) tableviewtableview1的optionsviewfooter=ture然后在cxGRid1的customize.中的summary 的footer.add需要合计的列kind= skSum在Footer的第一列显示合计:加一个Summary项,Column设为Grid的第一列,Kind设为skNone在该Summary项的OnGetText事件中,输入:procedure TFormExpense.tvExpenseTcxGridDBDataControllerTcxDataSummaryFooterSummaryItems2GetText( Sender: TcxDataSummaryItem; const AValue: Variant; AIsFooter: Boolean; var AText: String);begin AText := 合计:;end; (2) 按条件汇总:在TableView的DataController-Summary-FooterSummary-OnSummary事件中,输入:procedure TFormExpense.tvExpenseDataControllerSummaryFooterSummaryItemsSummary( ASender: TcxDataSummaryItems; Arguments: TcxSummaryEventArguments; var OutArguments: TcxSummaryEventOutArguments);begin /得到字段名 TcxDBDataSummaryItem(Arguments.SummaryItem).FieldName; if (ASender.DataController.ValuesArguments.RecordIndex, tvExpenseLevel.Index 1) /只统计Level列=1的值 and (TcxDBDataSummaryItem(Arguments.SummaryItem).Kind = skSum) then OutArguments.Value := 0; /Level 1的统计值设为0end;OptionView中属性GroupFooters设为gfAlwaysVisible并设置需要求和的列,在summary.default for Groups 下add加入需要合计的字段,column下显示fieldname 为统计字段,format为格式,kind为统计方法,position 为位子 spfooter 在分组的下面,spgroup 在分组的上面或用cxGridPopupMenu1,在运行時可对任意数字类型列求和,方法是只需设置cxGridPopupMenu1的属性Grid为cxGrid1DBTableView1的cxGrid,*3去掉cxgrid 中的过滤下拉箭头解决: 选择tableview1.optionscustomize.columnfiltering=fasle;*4让“Drag a column here to group by that column”不显示 解决:在cxGrid1DBTableView1-optionsview-groupbybox:=false即可*5GroupPanel上面的英文Drag a column header to group by that column怎么可以改成中文解决:最简单的方法是 TcxGridTableView.OnCustomDrawPartBackground,也可用 OnCustomDrawGroupCell:procedure TForm1.cxGrid1DBTableView1CustomDrawPartBackground(Sender: TcxGridTableView; ACanvas: TcxCanvas;AViewInfo: TcxCustomGridCellViewInfo; var ADone: Boolean);beginAViewInfo.Text:=动态设置 GroupBox 的显示内容;ACanvas.FillRect(AViewInfo.Bounds);end;注:改成中文后将字段拖上去中文还是会显示,最好是设置空值*6如何实现如下功能:+财务部+原材料仓库+成品库+冲压车间+软件开发部这个是部门的名称,点击加号就可以将本部门的人员情况显示出来。解决:其实这是一个主从表关系,1:填好主表的keyfieldnames2:填好从表的keyfieldnames3:填好从表的detaikeyfieldNames与masterkeyfieldnames4: 从表的数据源一定要按与主表关联的字段排序注:其它地方设置了主从表结构那样就显示不出来,比如设置了从表的Table或者Query的mastersource和asterfield就会不能显示数据!如果是两个cxGrid的主从关系,这样设置就很OK了。*7类似PageControl显示解决:增加一个Level,将cxGrid1-RootLevelOptions-DetailTabsPosition设为dtpTop,然后相应的设置cxGrid1Level1,和cxGrid1Level2的Caption值。*8如何设定左边几列,不能滚动解决:使用DB Banded Table才可以实现,在cxGrid1DBBandedTableView里建立Band0,Band1Band0的Fixed=tfLeftBand1的Fixed=tfnone设置要锁定的字段的BandIndex=0,其它为1,就OK了。*9. 怎样实现如EXCEL一样的,当前格=G14+G15+G16 这样的功能解决: 举一个简单的例子:label1.Caption := cxGrid1DBTableView1.DataController.Values2,3+cxGrid1DBTableView2.DataController.Values1, 1+cxGrid1DBTableView3.DataController.Values1, 1;所以不同cxGrid1DBTableView中的数据都可以给当前格,这样就做到了EXCEL中的当前格=G14+G15+G16 类似的功能。*10. 鼠标右击cxGrid1DBBandedTableView1菜单里的Edit Layout什么用,怎么使用?解决:可以拖动字段,并列的可以拖成有层次感(一层层), 拖动时会显示箭头的,就是说可以拖一个字段放*11怎样将cxGrid里的数据导入到EXCEL,HTML,XML和TEXT解决:usescxExportGrid4Link; ( cxExportGrid6Link)procedure TForm1.Button1Click(Sender: TObject);beginExportGrid4ToEXCEL(d:/wang.xsl,cxGrid1,True,True);ExportGrid4ToTEXT(d:/wang.txt,cxGrid1,True,True);ExportGrid4ToXML(d:/wang.xml,cxGrid1,True,True);ExportGrid4ToHTML(d:/wang.html,cxGrid1,True,True);end;*12. 如何使满足条件的数据显示不同的颜色?解决:varAYellowStyle: TcxStyle;procedure TForm1.FormCreate(Sender: TObject);begin/行颜色AYellowStyle := TcxStyle.Create(Self);AYellowStyle.Color := $0080FFFF;AYellowStyle.TextColor := clMaroon;end;procedure TForm1.cxGrid1DBBandedTableView1StylesGetContentStyle(Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord;AItem: TcxCustomGridTableItem; out AStyle: TcxStyle);beginif ARecord.ValuescxGrid1DBBandedTableView1Lengthcm.Index 81 thenAStyle := AYellowStyle;end;这里cxGrid1DBBandedTableView1Lengthcm.Index小于81时就显示黄色*13. 如何从外边的TXT文件导入到cxGrid?解决:procedure CustomizeColumns;procedure LoadData;procedure TForm1.CustomizeColumns;constcDistance = 1;cRadius = 5;cPeriod = 4;cPstring = 0;varI: Integer;beginDecimalSeparator := .;with cxGrid1TableView2 dofor I := 0 to ColumnCount - 1 doif I in cDistance, cRadius thenColumnsI.DataBinding.ValueTypeClass := TcxIntegerValueType/1,5列为Integerelseif I in cPstring,cPeriod thenColumnsI.DataBinding.ValueTypeClass := TcxStringValueType/0,4列为StringelseColumnsI.DataBinding.ValueTypeClass := TcxFloatValueType;/其他为Floatend;procedure TForm1.LoadData;constAFileName = 资产负债表.txt;AHeaderLineCount = 2;varARecords, AValues: TStringList;I: Integer;procedure InitRecord(const Str: string);varJ: Integer;V: Variant;beginAValues.CommaText := Str;for J := 0 to AValues.Count - 1 doif AValues.StringsJ - thenbeginV := AValues.StringsJ;if not VarIsNull(V) thencxGrid1TableView2.DataController.ValuesI, J := V;end;end;beginif not FileExists(AFileName) thenraise Exception.Create(Data file not found);ARecords := TStringList.Create;AValues := TStringList.Create;with ARecords dotryLoadFromFile(AFileName);cxGrid1TableView2.BeginUpdate;cxGrid1TableView2.DataController.RecordCount := Count - AHeaderLineCount;for I := 0 to Count - (AHeaderLineCount + 1) doInitRecord(StringsI + AHeaderLineCount);finallycxGrid1TableView2.EndUpdate;ARecords.Free;AValues.Free;end;end;procedure TForm1.FormCreate(Sender: TObject);beginCustomizeColumns;LoadData_Zcfz;end;*14 如何改变列的颜色?解决:varAFirstColumnStyle: TcxStyle;procedure TForm1.FormCreate(Sender: TObject);begin/列颜色AFirstColumnStyle := TcxStyle.Create(Self);AFirstColumnStyle.Color := clAqua;AFirstColumnStyle.TextColor := clBlue;cxGrid1TableView1.Columns1.Styles.Content := AFirstColumnStyle;end;*15 Set as default的用法?解决:Set as default的用法是为了解决设置参数的方便而做的,比如:连好数据库以后,更改cxGrid1DBBandedTableView1-OptionsCustomize- ColumnFiltering 设为False。(这个设置可以将字段名的下拉单给去掉)更改cxGrid1DBBandedTableView1-OptionsView- Navigator 设置为True。然后右击cxGrid1DBBandedTableView1,在弹出的菜单栏里面点击Set as default。OK,下次你再产生一个新的cxGrid1DBBandedTableView1时这些设置和刚才的一样了。如果需要设置的参数很多的时候,这个Set as default很有用!*16. 怎样使鼠标移动时,相应的单元里的文字变色?解决:varFTrackItem: TcxCustomGridTableItem;FTrackRec: TcxCustomGridRecord;procedure TForm1.cxGrid1DBTableView1CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);beginif (AViewInfo.GridRecord = FTrackRec) and (AViewInfo.Item = FTrackItem) thenbeginACanvas.Font.Color := clred; /红色字体ACanvas.Font.Style := fsUnderline;/带下划线end;end;procedure TForm1.cxGrid1DBTableView1MouseMove(Sender: TObject;Shift: TShiftState; X, Y: Integer);varAHitTest: TcxCustomGridHitTest;ATrackItem: TcxCustomGridTableItem;ATrackRec: TcxCustomGridRecord;beginATrackItem := FTrackItem;ATrackRec := FTrackRec;AHitTest := (Sender as TcxGridSite).GridView.ViewInfo.GetHitTest(X, Y);if AHitTest is TcxGridRecordCellHitTest thenbeginFTrackItem := TcxGridRecordCellHitTest(AHitTest).Item;FTrackRec := TcxGridRecordCellHitTest(AHitTest).GridRecord;endelsebeginFTrackItem := nil;FTrackRec := nil;end;if (ATrackItem FTrackItem) or (ATrackRec FTrackRec) thenbegin/ Invalidate old cellif ATrackRec nil thenATrackRec.Invalidate(ATrackItem);/ Invalidate new cellif FTrackRec nil thenFTrackRec.Invalidate(FTrackItem);end;end;*zj注:17-27转载自/shuaihj/article/details/613101117. 怎样设计多表头的cxGrid?解决:cxGrid可以解决如下的表头:-| 说明1 | 说明2 |-| 字段1 | 字段2 | 字段3 | 字段4 | 字段5 | 字段6 | 字段7 | 字段8 | 字段9 |实现这个很简单,你可以直接在上面拖动字段名,拖动时会显示箭头的,放入你想显示的位置就OK了。或者在鼠标右击cxGrid1DBBandedTableView1菜单里的Edit Layout里也可以拖放。但是cxGrid不能实现如下的多表头形式:-| 说明1 | 说明2 |-| 说明3 | 说明4 | 说明5 | 说明6 | 字段1 | 字段2 | 字段3 | 字段4 | 字段5 |不知道有谁能实现这样的多表头?*18. 在主从表结构时,当点开“+”时怎样将焦点聚在相应主表的记录上?解决:varHitTest: TcxCustomGridHitTest;procedure TColumnsShareDemoMainForm.tvProjectsMouseDown(Sender: TObject;Button: TMouseButton; Shift: TShiftState; X, Y: Integer);begin/ Note that the Sender parameter is a SiteHitTest := (Sender as TcxGridSite).GridView.ViewInfo.GetHitTest(X, Y);/ The point belongs to the +/- button areaif HitTest is TcxGridExpandButtonHitTest then/ Move focus to the recordTcxGridExpandButtonHitTest(HitTest).GridRecord.Focused := True;end;*19 CXGrid4如何展开全部节点解决:GridDBTableView1.DataController.Groups.FullExpand;*20. cxGrid如何动态创建Items的Editor的项?解决:cxGrid的列有一个属性,它的编辑框可以指定combobox,spinedit等.在设计时,可以为combobox的items添加项目.请问是否可以动态创建?(run-time时由程序加入)varA:TDataSource:B:TcxlookupcomboboxProperties;beginA:=TDataSource.create(self);B:=tcxlookupcomboboxproperties.create(self);A.Dataset:=Dic_ry_xb;/此处指定数据源。b.listdource:=a;/此处指明字段的listsource属性。b.keyfieldnames:=a; /此处指明字段的关键字段b.listfieldnames:=b; /此处指明字段的返回值。b.listcolumns.items0.caption:=x; /此处默认是会建立一个字段,但是显示的表头是name,所以此处让它显示为自己想要的中午显示。cxGrid1DBTableView1c1_sex_code.Properties:=b; /此处指明是那个字段。end; /这个是初始化的代码*21. 拷贝文件时有进度显示解决:procedure TForm1.mycopyfile(sourcef,targetf:string);varFromF, ToF: file;NumRead, NumWritten: Integer;Buf: array1.2048 of Char;n:integer;begin AssignFile(FromF, sourcef); Reset(FromF, 1); Record size = 1 AssignFile(ToF,targetf); Open output file Rewrite(ToF, 1); Record size = 1 n:=0; repeat BlockRead(FromF, Buf, SizeOf(Buf), NumRead); form1.label1.caption:=IntToStr(sizeof(buf)*n*100 div FileSize(FromF)+100%; application.ProcessMessages; /显示进度 BlockWrite(ToF, Buf, NumRead, NumWritten); inc(n); until (NumRead = 0) or (NumWritten NumRead); form1.Label1.Caption:=100%; CloseFile(FromF); CloseFile(ToF);end;procedure TForm1.Button1Click(Sender: TObject);beginmycopyfile(e:/components/tv2k-w2k.zip,c:/a.zip);end;*22. cxGrid 设置斑马线解决:在TcxGridDBBandedTableView.Styles属性中有 ContentEven(奇数行风格) ContentOdd (偶数行风格) ,设定一下风格就好了。*23 根据记录内容更改字体颜色解决:参考范例CustomDrawTableViewDemo,主要在TcxGridDBBandedTableView.OnCustomDrawCell事件中实现。如下代码:if (Pos(-,AViewInfo.GridRecord.DisplayTextscolOrderProductCount.Index) 0) thenbegin /标识负数记录 /ACanvas.Canvas.Brush.Color:= clMoneyGreen; ACanvas.Canvas.Font.Color:= clRed;/clActiveCaptionend;其中colOrderProductCount是“产品订数”列。还要有一步就是要刷新显示TcxGridDBBandedTableView.LayoutChanged();/tvCars.LayoutChanged(False);TcxGridDBBandedTableView.Painter.Invalidate;*24 用代码展开/收缩主从结构解决: Self.tvDepartment.ViewData.Expand(True); Self.tvDepartment.ViewData.Collaspe(True);注:tvDepartment为主表对应的TableView*25 在内置右键菜单的后面增加菜单项解决:首先应在Form上加一个cxGridPopupMenu控件 以启用右键菜单UseBuildInPopupMenus设为Trueprocedure TFormItemList.FormCreate(Sender: TObject);var AMenu: TComponent; FMenuItem, FSubMenuItem: TMenuItem;begin AMenu := nil; if cxGridPopupMenu.BuiltInPopupMenus.Count = 0 then Exit; AMenu := cxGridPopupMenu.BuiltInPopupMenus0.PopupMenu; /第一个内置右键菜单(表头菜单) 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); 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 := miCollapseAllGroupClick; 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.Create(Self); FSubMenuItem.Name := miFilterPanelAuto; FSubMenuItem.Caption := 自动(&A); FSubMenuItem.RadioItem := True; FSubMenuItem.GroupIndex := 5; /指定同一组 FSubMenuItem.Checked := True; FSubMenuItem.OnClick := miFilterPanelClick; FMenuItem.Add(FSubMenuItem); /加入二级子菜单 /总是显示 FSubMenuItem := TMenuItem.Create(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 := miFilterPanelNerver; 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; FMenuItem.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(AMenu).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.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); FMenuItem.Name := miPrint; FMenuItem.Caption := 打印(&P); TPopupMenu(AMenu).Images.AddImage(FormMain.ImageL

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论