1. 程式人生 > 實用技巧 >Delphi CxGrid 用法詳解說明

Delphi CxGrid 用法詳解說明

1. 去掉cxgrid中抬頭的box,在tableview1的ptionsview的groupbybox=false;
1.1類似PageControl顯示
 
解決:增加一個Level,將cxGrid1->RootLevelOptions->DetailTabsPosition設為dtpTop,
然後相應的設定cxGrid1Level1,和cxGrid1Level2的Caption值
 
 
2. 在GRID footer 中加入sum(列),tableview1的optionsview的footer=ture
 
然後在cxGRid1的customize中的summary 的footer.add需要合計的列kind
= skSum 3. 去掉cxgrid中的過濾下拉箭頭選擇tableview1.optionscustomize.columnfiltering=fasle; 4. cxGrid1DBTableView1 的OptionView中屬性GroupFooters設為gfAlwaysVisible並設定需要求和的列,在summary.defaultfor Groups 下add加入需要合計的欄位,column下顯示fieldname為統計欄位,format為格式,kind為統計方法,position 為位子 spfooter 在分組的下面,spgroup在分組的上面 或用cxGridPopupMenu1,在執行時可對任意數字型別列求和,方法是隻需設定cxGridPopupMenu1的屬性Grid為cxGrid1DBTableView1的cxGrid, 即可實現您所需功能
5. DEVExpress裡的cxGrid預設的數值格式帶¥,怎麼去掉啊! 雙擊Cxgrid,選擇colmnum改變型別options.properties.Memo,在displayformat中進行設定 6. 在網格最後一行的最後一格回車自動增加一條記錄,並跳到新記錄的第一格 設定cxGrid1DBTableView1的OptionsBehavior的FocusFirsCellOnNewRecord與GoToNextCellOnEnter為True,FocusCellOnCycle設為True 7.網格中通過Tab跳轉,設定cxGrid1DBTableView1的OptionsBehavior的FocusCellOnTab為True
8.設定是否能夠在網格中編輯資料,設定cxGrid1DBTableView1的OptionsData的Appending設為True,Deleting為True,Editing為True 9.設定是否能選中網格,設定cxGrid1DBTableView1的OptionsSelection的CellSelect為True 10.設定是否能夠反選,設定cxGrid1DBTableView1的OptionsSelection的InsertSelect為True 11. 設定行高:在cxGridDBTableView1.OptionsView.DataRowHeight 12. 改變字型在 cxStyleRepository雙擊它,在裡面新增GridTableViewStyleSheetDevExpress 然後改變Style標籤裡面的cxStyle的字型就可以控制cxGrid的字型了 13. 有圖片和MEMO的例子: 拖入一個cxGrid1,Table1,DataSource1。Table1的DatabaseName設為DBDEMOS,TableName設為biolife.db, Active設為True;DataSource1的DataSet設為Table1;cxGrid1DBTableView1的DataController中的DataSource 設為DataSource1;右擊cxGrid1DBTableView1選擇Create AllColumns;雙擊cxGrid1,在彈出的視窗中找到 cxGrid1DBTableView1Notes和cxGrid1DBTableView1Graphic,將它們的Properties屬性設為BlobEdit;執行看看結果。再將cxGrid1DBTableView1Graphic的Properties屬性設為Image,再將Properties下的Stretch設為True,將cxGrid1DBTableView1->optionsview->CellAutoHeight設為True,看看結果。 14. 如何讓“Drag a column here to group by that column”不顯示 解決:點選cxGrid1上的cxGrid1DBTableView1 在cxGrid1DBTableView1->optionsview->groupbybox:=false即可 15. GroupPanel上面的英文[Drag a column header to group by thatcolumn]怎麼可以改成中文? 解決:最簡單的方法是 TcxGridTableView.OnCustomDrawPartBackground ,也可用OnCustomDrawGroupCell: procedureTForm1.cxGrid1DBTableView1CustomDrawPartBackground( Sender: TcxGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxCustomGridCellViewInfo; var ADone:Boolean); begin AViewInfo.Text:='動態設定 GroupBox 的顯示內容'; ACanvas.FillRect(AViewInfo.Bounds); end; 16. 如何實現如下功能: 財務部 原材料倉庫 成品庫 衝壓車間 軟體開發部 這個是部門的名稱,點選加號就可以將本部門的人員情況顯示出來。 解決:其實這是一個主從表關係, (1):填好主表的keyfieldnames (2):填好從表的keyfieldnames (3):填好從表的 detaikeyfieldNames與masterkeyfieldnames (4): 從表的資料來源一定要按與主表關聯的欄位排序 注:其它地方設定了主從表結構那樣就顯示不出來,比如設定了從表的Table或者Query的mastersource和 asterfield就會不能顯示資料!如果是兩個cxGrid的主從關係,這樣設定就很OK了。 17. 類似PageControl顯示 解決:增加一個Level,將cxGrid1->RootLevelOptions->DetailTabsPosition設為dtpTop,然後相應的設定cxGrid1Level1,和cxGrid1Level2的Caption值。 18. 如何設定左邊幾列,不能滾動? 解決:使用DB BandedTable才可以實現, 在cxGrid1DBBandedTableView裡建立Band0,Band1 Band0的Fixed=tfLeft Band1的Fixed=tfnone 設定要鎖定的欄位的BandIndex=0,其它為1,就OK了。 19. 怎樣實現如EXCEL一樣的,當前格=G14 G15 G16 這樣的功能 解決:舉一個簡單的例子:label1.Caption :=cxGrid1DBTableView1.DataController.Values[2, 3] cxGrid1DBTableView2.DataController.Values[1, 1]cxGrid1DBTableView3.DataController.Values[1, 1]; 所以不同cxGrid1DBTableView中的資料都可以給當前格,這樣就做到了EXCEL中的當前格=G14 G15 G16類似的功能。 20. 滑鼠右擊cxGrid1DBBandedTableView1選單裡的EditLayout什麼用,怎麼使用? 解決:可以拖動欄位,並列的可以拖成有層次感(一層層),拖動時會顯示箭頭的,就是說可以拖一個欄位放 到最上面,就可以使記錄按此欄位進行分組。點選其中一個欄位,上面還會出現一個上升或者下降的小三角形,這個 小三角形的作用是在執行階段,資料就會按照這個欄位上升或者下降排序。 還有一個Set asDefault的作用是保持當前TableView的引數,下此產生新的TableView的時候就會可以和上次保持的引數一樣。這個還沒有做過試驗。 21. 怎樣將cxGrid裡的資料匯入到EXCEL,HTML,XML和TEXT 解決:這個問題在用了cxGrid以後變得異常簡單, uses cxExportGrid4Link; procedure TForm1.Button1Click(Sender: TObject); begin ExportGrid4ToEXCEL('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; 22. 如何使滿足條件的資料顯示不同的顏色? 解決: var AYellowStyle: TcxStyle; procedure TForm1.FormCreate(Sender: TObject); begin //行顏色 AYellowStyle :=TcxStyle.Create(Self); AYellowStyle.Color := $0080FFFF; AYellowStyle.TextColor := clMaroon; end; procedureTForm1.cxGrid1DBBandedTableView1StylesGetContentStyle( Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord; AItem: TcxCustomGridTableItem; out AStyle: TcxStyle); begin if ARecord.Values[cxGrid1DBBandedTableView1Lengthcm.Index]< 81 then AStyle := AYellowStyle; end; 這裡cxGrid1DBBandedTableView1Lengthcm.Index小於81時就顯示黃色 23. 如何從外邊的TXT檔案匯入到cxGrid? 解決: procedure CustomizeColumns; procedure LoadData; procedure TForm1.CustomizeColumns; const cDistance = 1; cRadius = 5; cPeriod = 4; cPstring = 0; var I: Integer; begin DecimalSeparator := '.'; with cxGrid1TableView2 do for I := 0 to ColumnCount - 1 do if I in[cDistance, cRadius] then Columns[I].DataBinding.ValueTypeClass :=TcxIntegerValueType//1,5列為Integer else if I in [cPstring,cPeriod] then Columns[I].DataBinding.ValueTypeClass :=TcxStringValueType//0,4列為String else Columns[I].DataBinding.ValueTypeClass :=TcxFloatValueType;//其他為Float end; procedure TForm1.LoadData; const AFileName = '資產負債表.txt'; AHeaderLineCount = 2; var ARecords, AValues: TStringList; I: Integer; procedure InitRecord(const Str:string); var J:Integer; V:Variant; begin AValues.CommaText := Str; for J := 0 toAValues.Count - 1 do if AValues.Strings[J] <> '-'then begin V := AValues.Strings[J]; if not VarIsNull(V) then cxGrid1TableView2.DataController.Values[I, J] := V; end; end; begin if not FileExists(AFileName) then raiseException.Create('Data file not found'); ARecords := TStringList.Create; AValues := TStringList.Create; with ARecords do try LoadFromFile(AFileName); cxGrid1TableView2.BeginUpdate; cxGrid1TableView2.DataController.RecordCount := Count -AHeaderLineCount; for I := 0 toCount - (AHeaderLineCount 1) do InitRecord(Strings[I AHeaderLineCount]); finally cxGrid1TableView2.EndUpdate; ARecords.Free; AValues.Free; end; end; procedure TForm1.FormCreate(Sender: TObject); begin CustomizeColumns; LoadData_Zcfz; end; 24. 如何改變列的顏色? var AFirstColumnStyle: TcxStyle; procedure TForm1.FormCreate(Sender: TObject); begin //列顏色 AFirstColumnStyle :=TcxStyle.Create(Self); AFirstColumnStyle.Color := clAqua; AFirstColumnStyle.TextColor :=clBlue; cxGrid1TableView1.Columns[1].Styles.Content:= AFirstColumnStyle; end; 25.Set as default的用法? 解決:Set asdefault的用法是為了解決設定引數的方便而做的,比如: 連好資料庫以後,更改cxGrid1DBBandedTableView1->OptionsCustomize->ColumnFiltering設為False。(這個設定可以將欄位名的下拉單給去掉)更改cxGrid1DBBandedTableView1->OptionsView->Navigator設定為True。然後右擊cxGrid1DBBandedTableView1,在彈出的選單欄裡面點選Set asdefault。 OK,下次你再產生一個新的cxGrid1DBBandedTableView1時這些設定和剛才的一樣了。如果需要設定的引數很多的時候,這個Setas default很有用! 26. 怎樣使滑鼠移動時,相應的單元裡的文字變色? 解決: var FTrackItem: TcxCustomGridTableItem; FTrackRec: TcxCustomGridRecord; procedure TForm1.cxGrid1DBTableView1CustomDrawCell( Sender: TcxCustomGridTableView; ACanvas:TcxCanvas; AViewInfo:TcxGridTableDataCellViewInfo; var ADone: Boolean); begin if (AViewInfo.GridRecord = FTrackRec) and(AViewInfo.Item = FTrackItem) then begin ACanvas.Font.Color :=clred; //紅色字型 ACanvas.Font.Style := [fsUnderline];//帶下劃線 end; end; procedure TForm1.cxGrid1DBTableView1MouseMove(Sender:TObject; Shift: TShiftState; X, Y: Integer); var AHitTest: TcxCustomGridHitTest; ATrackItem: TcxCustomGridTableItem; ATrackRec: TcxCustomGridRecord; begin ATrackItem := FTrackItem; ATrackRec := FTrackRec; AHitTest := (Sender asTcxGridSite).GridView.ViewInfo.GetHitTest(X, Y); if AHitTest isTcxGridRecordCellHitTest then begin FTrackItem :=TcxGridRecordCellHitTest(AHitTest).Item; FTrackRec :=TcxGridRecordCellHitTest(AHitTest).GridRecord; end else begin FTrackItem :=nil; FTrackRec :=nil; end; if (ATrackItem<> FTrackItem) or (ATrackRec<> FTrackRec) then begin // Invalidateold cell if ATrackRec<> nil then ATrackRec.Invalidate(ATrackItem); // Invalidatenew cell if FTrackRec<> nil then FTrackRec.Invalidate(FTrackItem); end; end;