delphi控件cxGrid用法大全.doc_第1頁(yè)
delphi控件cxGrid用法大全.doc_第2頁(yè)
delphi控件cxGrid用法大全.doc_第3頁(yè)
delphi控件cxGrid用法大全.doc_第4頁(yè)
delphi控件cxGrid用法大全.doc_第5頁(yè)
已閱讀5頁(yè),還剩28頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

delphi中cxGrid使用匯總(一)2011-10-27 23:26:16|分類:delphi xe2|字號(hào)訂閱1. 去掉cxGrid中臺(tái)頭的Box解決:在tableview1的ptionsview的groupbybox=false;*2統(tǒng)計(jì)功能解決:(1) tableviewtableview1的optionsviewfooter=ture然后在cxGRid1的customize.中的summary 的footer.add需要合計(jì)的列kind= skSum在Footer的第一列顯示合計(jì):加一個(gè)Summary項(xiàng),Column設(shè)為Grid的第一列,Kind設(shè)為skNone在該Summary項(xiàng)的OnGetText事件中,輸入:procedure TFormExpense.tvExpenseTcxGridDBDataControllerTcxDataSummaryFooterSummaryItems2GetText( Sender: TcxDataSummaryItem; const AValue: Variant; AIsFooter: Boolean; var AText: String);begin AText := 合計(jì):;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) /只統(tǒng)計(jì)Level列=1的值 and (TcxDBDataSummaryItem(Arguments.SummaryItem).Kind = skSum) then OutArguments.Value := 0; /Level 1的統(tǒng)計(jì)值設(shè)為0end;OptionView中屬性GroupFooters設(shè)為gfAlwaysVisible并設(shè)置需要求和的列,在summary.default for Groups 下add加入需要合計(jì)的字段,column下顯示fieldname 為統(tǒng)計(jì)字段,format為格式,kind為統(tǒng)計(jì)方法,position 為位子 spfooter 在分組的下面,spgroup 在分組的上面或用cxGridPopupMenu1,在運(yùn)行時(shí)可對(duì)任意數(shù)字類型列求和,方法是只需設(shè)置cxGridPopupMenu1的屬性Grid為cxGrid1DBTableView1的cxGrid,*3去掉cxgrid 中的過(guò)濾下拉箭頭解決: 選擇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怎么可以改成中文解決:最簡(jiǎn)單的方法是 TcxGridTableView.OnCustomDrawPartBackground,也可用 OnCustomDrawGroupCell:procedure TForm1.cxGrid1DBTableView1CustomDrawPartBackground(Sender: TcxGridTableView; ACanvas: TcxCanvas;AViewInfo: TcxCustomGridCellViewInfo; var ADone: Boolean);beginAViewInfo.Text:=動(dòng)態(tài)設(shè)置 GroupBox 的顯示內(nèi)容;ACanvas.FillRect(AViewInfo.Bounds);end;注:改成中文后將字段拖上去中文還是會(huì)顯示,最好是設(shè)置空值*6如何實(shí)現(xiàn)如下功能:+財(cái)務(wù)部+原材料倉(cāng)庫(kù)+成品庫(kù)+沖壓車間+軟件開(kāi)發(fā)部這個(gè)是部門的名稱,點(diǎn)擊加號(hào)就可以將本部門的人員情況顯示出來(lái)。解決:其實(shí)這是一個(gè)主從表關(guān)系,1:填好主表的keyfieldnames2:填好從表的keyfieldnames3:填好從表的detaikeyfieldNames與masterkeyfieldnames4: 從表的數(shù)據(jù)源一定要按與主表關(guān)聯(lián)的字段排序注:其它地方設(shè)置了主從表結(jié)構(gòu)那樣就顯示不出來(lái),比如設(shè)置了從表的Table或者Query的mastersource和asterfield就會(huì)不能顯示數(shù)據(jù)!如果是兩個(gè)cxGrid的主從關(guān)系,這樣設(shè)置就很OK了。*7類似PageControl顯示解決:增加一個(gè)Level,將cxGrid1-RootLevelOptions-DetailTabsPosition設(shè)為dtpTop,然后相應(yīng)的設(shè)置cxGrid1Level1,和cxGrid1Level2的Caption值。*8如何設(shè)定左邊幾列,不能滾動(dòng)解決:使用DB Banded Table才可以實(shí)現(xiàn),在cxGrid1DBBandedTableView里建立Band0,Band1Band0的Fixed=tfLeftBand1的Fixed=tfnone設(shè)置要鎖定的字段的BandIndex=0,其它為1,就OK了。*9. 怎樣實(shí)現(xiàn)如EXCEL一樣的,當(dāng)前格=G14+G15+G16 這樣的功能解決: 舉一個(gè)簡(jiǎn)單的例子:label1.Caption := cxGrid1DBTableView1.DataController.Values2,3+cxGrid1DBTableView2.DataController.Values1, 1+cxGrid1DBTableView3.DataController.Values1, 1;所以不同cxGrid1DBTableView中的數(shù)據(jù)都可以給當(dāng)前格,這樣就做到了EXCEL中的當(dāng)前格=G14+G15+G16 類似的功能。*10. 鼠標(biāo)右擊cxGrid1DBBandedTableView1菜單里的Edit Layout什么用,怎么使用?解決:可以拖動(dòng)字段,并列的可以拖成有層次感(一層層), 拖動(dòng)時(shí)會(huì)顯示箭頭的,就是說(shuō)可以拖一個(gè)字段放*11怎樣將cxGrid里的數(shù)據(jù)導(dǎo)入到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. 如何使?jié)M足條件的數(shù)據(jù)顯示不同的顏色?解決: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時(shí)就顯示黃色*13. 如何從外邊的TXT文件導(dǎo)入到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 = 資產(chǎn)負(fù)債表.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的用法是為了解決設(shè)置參數(shù)的方便而做的,比如:連好數(shù)據(jù)庫(kù)以后,更改cxGrid1DBBandedTableView1-OptionsCustomize- ColumnFiltering 設(shè)為False。(這個(gè)設(shè)置可以將字段名的下拉單給去掉)更改cxGrid1DBBandedTableView1-OptionsView- Navigator 設(shè)置為True。然后右擊cxGrid1DBBandedTableView1,在彈出的菜單欄里面點(diǎn)擊Set as default。OK,下次你再產(chǎn)生一個(gè)新的cxGrid1DBBandedTableView1時(shí)這些設(shè)置和剛才的一樣了。如果需要設(shè)置的參數(shù)很多的時(shí)候,這個(gè)Set as default很有用!*16. 怎樣使鼠標(biāo)移動(dòng)時(shí),相應(yīng)的單元里的文字變色?解決: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轉(zhuǎn)載自/shuaihj/article/details/613101117. 怎樣設(shè)計(jì)多表頭的cxGrid?解決:cxGrid可以解決如下的表頭:-| 說(shuō)明1 | 說(shuō)明2 |-| 字段1 | 字段2 | 字段3 | 字段4 | 字段5 | 字段6 | 字段7 | 字段8 | 字段9 |實(shí)現(xiàn)這個(gè)很簡(jiǎn)單,你可以直接在上面拖動(dòng)字段名,拖動(dòng)時(shí)會(huì)顯示箭頭的,放入你想顯示的位置就OK了?;蛘咴谑髽?biāo)右擊cxGrid1DBBandedTableView1菜單里的Edit Layout里也可以拖放。但是cxGrid不能實(shí)現(xiàn)如下的多表頭形式:-| 說(shuō)明1 | 說(shuō)明2 |-| 說(shuō)明3 | 說(shuō)明4 | 說(shuō)明5 | 說(shuō)明6 | 字段1 | 字段2 | 字段3 | 字段4 | 字段5 |不知道有誰(shuí)能實(shí)現(xiàn)這樣的多表頭?*18. 在主從表結(jié)構(gòu)時(shí),當(dāng)點(diǎn)開(kāi)“+”時(shí)怎樣將焦點(diǎn)聚在相應(yīng)主表的記錄上?解決: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如何展開(kāi)全部節(jié)點(diǎn)解決:GridDBTableView1.DataController.Groups.FullExpand;*20. cxGrid如何動(dòng)態(tài)創(chuàng)建Items的Editor的項(xiàng)?解決:cxGrid的列有一個(gè)屬性,它的編輯框可以指定combobox,spinedit等.在設(shè)計(jì)時(shí),可以為combobox的items添加項(xiàng)目.請(qǐng)問(wèn)是否可以動(dòng)態(tài)創(chuàng)建?(run-time時(shí)由程序加入)varA:TDataSource:B:TcxlookupcomboboxProperties;beginA:=TDataSource.create(self);B:=tcxlookupcomboboxproperties.create(self);A.Dataset:=Dic_ry_xb;/此處指定數(shù)據(jù)源。b.listdource:=a;/此處指明字段的listsource屬性。b.keyfieldnames:=a; /此處指明字段的關(guān)鍵字段b.listfieldnames:=b; /此處指明字段的返回值。b.listcolumns.items0.caption:=x; /此處默認(rèn)是會(huì)建立一個(gè)字段,但是顯示的表頭是name,所以此處讓它顯示為自己想要的中午顯示。cxGrid1DBTableView1c1_sex_code.Properties:=b; /此處指明是那個(gè)字段。end; /這個(gè)是初始化的代碼*21. 拷貝文件時(shí)有進(jìn)度顯示解決: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; /顯示進(jìn)度 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 設(shè)置斑馬線解決:在TcxGridDBBandedTableView.Styles屬性中有 ContentEven(奇數(shù)行風(fēng)格) ContentOdd (偶數(shù)行風(fēng)格) ,設(shè)定一下風(fēng)格就好了。*23 根據(jù)記錄內(nèi)容更改字體顏色解決:參考范例CustomDrawTableViewDemo,主要在TcxGridDBBandedTableView.OnCustomDrawCell事件中實(shí)現(xiàn)。如下代碼:if (Pos(-,AViewInfo.GridRecord.DisplayTextscolOrderProductCount.Index) 0) thenbegin /標(biāo)識(shí)負(fù)數(shù)記錄 /ACanvas.Canvas.Brush.Color:= clMoneyGreen; ACanvas.Canvas.Font.Color:= clRed;/clActiveCaptionend;其中colOrderProductCount是“產(chǎn)品訂數(shù)”列。還要有一步就是要刷新顯示TcxGridDBBandedTableView.LayoutChanged();/tvCars.LayoutChanged(False);TcxGridDBBandedTableView.Painter.Invalidate;*24 用代碼展開(kāi)/收縮主從結(jié)構(gòu)解決: Self.tvDepartment.ViewData.Expand(True); Self.tvDepartment.ViewData.Collaspe(True);注:tvDepartment為主表對(duì)應(yīng)的TableView*25 在內(nèi)置右鍵菜單的后面增加菜單項(xiàng)解決:首先應(yīng)在Form上加一個(gè)cxGridPopupMenu控件 以啟用右鍵菜單UseBuildInPopupMenus設(shè)為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; /第一個(gè)內(nèi)置右鍵菜單(表頭菜單) if Assigned(AMenu) and AMenu.InheritsFrom(TPopupMenu) then begin TPopupMenu(AMenu).AutoHotkeys := maManual; /手動(dòng)熱鍵 /- FMenuItem := TMenuItem.Create(Self); FMenuItem.Caption := -; FMenuItem.Name := miLineForGroup; TPopupMenu(AMenu).Items.Add(FMenuItem); /展開(kāi)所有組 FMenuItem := TMenuItem.Create(Self); FMenuItem.Name := miExpandAllGroup; FMenuItem.Caption := 展開(kāi)所有組(&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); /過(guò)濾面板 FMenuItem := TMenuItem.Create(Self); FMenuItem.Name := miFilterPanel; FMenuItem.Caption := 過(guò)濾面板(&P); /自動(dòng)顯示 FSubMenuItem := TMenuItem.Create(Self); FSubMenuItem.Name := miFilterPanelAuto; FSubMenuItem.Caption := 自動(dòng)(&A); FSubMenuItem.RadioItem := True; FSubMenuItem.GroupIndex := 5; /指定同一組 FSubMenuItem.Checked := True; FSubMenuItem.OnClick := miFilterPanelClick; FMenuItem.Add(FSubMenuItem); /加入二級(jí)子菜單 /總是顯示 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); /自定義過(guò)濾 FMenuItem := TMenuItem.Create(Self); FMenuItem.Name := miCustomFilter; FMenuItem.Caption := 自定義過(guò)濾(&M); FMenuItem.OnClick := miCustomFilterClick; TPopupMenu(AMenu).Items.Add(FMenuItem); /過(guò)濾管理器 FMenuItem := TMenuItem.Create(Self); FMenuItem.Name := miFilterBuilder; TPopupMenu(AMenu).Images.AddImage(FormMain.ImageListExtend, 44); /添加圖標(biāo)圖像 FMenuItem.ImageIndex := TPopupMenu(AMenu).Images.Count - 1; /指定圖標(biāo)序號(hào) FMenuItem.Caption := 過(guò)濾管理器; FMenuItem.OnClick := Self.miFilterBuilderClick; TPopupMenu(AMenu).Items.Add(FMenuItem); /- FMenuItem := TMenuItem.Create(Self); FMenuItem.Caption := -; TPopupMenu(AMenu).Items.Add(FMenuItem); /導(dǎo)出 FMenuItem := TMenuItem.Create(Self); FMenuItem.Name := miExport; TPopupMenu(AMenu).Images.AddImage(FormMain.ImageListExtend, 37); FMenuItem.ImageIndex := TPopupMenu(AMenu).Images.Count - 1; FMenuItem.Caption := 導(dǎo)出(&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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論