CXGrid的使用技巧

更新时间:2023-12-10 04:56:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

CXGrid的使用技巧

日期:2009年12月21日 作者: 人气:1582 查看:[大字体 中字体 小字体] cxGrid技巧汇总 2009-04-01 12:48

==========================================================================

在主从TableView中根据主TableView得到对应的从TableView var

ADetailDC: TcxGridDataController; AView: TcxCustomGridTableView; begin

with cxGrid1DBTableView1.DataController do

ADetailDC := TcxGridDataController(GetDetailDataController(FocusedRecordIndex, 0)); AView := ADetailDC.GridView; end;

==============================================================================

定位在第一行并显示内置编辑器

cxDBVerticalGrid1.FocusedRow := cxDBVerticalGrid1.Rows[0]; cxDBVerticalGrid1.ShowEdit;

==============================================================================

隐藏 \字符串

该文本存储在scxGridNoDataInfoText资源字符串,可以将该资源字符串的内容设为空 来隐藏该文本。

uses cxClasses, cxGridStrs; ...

cxSetResourceString(@scxGridNoDataInfoText, '');

//如果\字符串已经显示,需要调用: .LayoutChanged;

============================================================

删除应用过滤后的行 var

I: Integer; begin

with do

for I := 0 to ViewData.RecordCount - 1 do begin

ViewData.Records[0].Focused := True; DataController.DataSet.Delete; end;

=============================================================

根据单元的值设置样式

procedure .StylesGetContentStyle(

Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord; AItem: TcxCustomGridTableItem; out AStyle: TcxStyle); begin

if ARecord.Values[AItem.Index] = aSomeValue then AStyle := ; end;

procedure .StylesGetContentStyle(

Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord; AItem: TcxCustomGridTableItem; out AStyle: TcxStyle); var

AColumn: TcxCustomGridTableItem; begin

AColumn := (Sender as TcxGridDBTableView).GetColumnByFieldName('Email'); if VarToStr(ARecord.Values[AColumn.Index]) = '' then AStyle := cxStyleNullEmail; end;

==============================================================================

TcxCustomGridTableView.FindItemByName, TcxGridDBTableView.GetColumnByFieldName or TcxGridDBDataController.GetItemByFieldName

with cxGrid1DBBandedTableView1.DataController do

AValue := Values[FocusedRecordIndex, GetItemByFieldName('SomeFieldName').Index];

===================================================================

动态生成BandedView

var

AView: TcxCustomGridView; begin

AView := .CreateView(TcxGridDBBandedTableView);

TcxGridDBBandedTableView(AView).DataController.DataSource := ; TcxGridDBBandedTableView(AView).Bands.Add;

with TcxGridDBBandedTableView(AView).Bands.Add do begin

Visible := False; FixedKind := fkLeft; end;

TcxGridDBBandedTableView(AView).DataController.CreateAllItems; .GridView := AView;

======================================================================

当底层数据集为空时显示一条空记录

procedure

.Enter(Sender: TObject); var

View: TcxGridDBTableView; begin

View := TcxGridDBTableView((Sender as TcxGrid).FocusedView); if View.DataController.DataSet.IsEmpty then begin

View.DataController.DataSet.Append;

View.Controller.EditingController.ShowEdit; end; end;

=======================================================================

在当前View插入记录

使用FocusedView属性得到当前焦点View,用View.DataController得到对应的Data Controller,

之后使用Data Controller的方法来操作数据: - Append - Insert - Post - Cancel

- DeleteFocused - DeleteSelection

示例: var

ARecIndex: Integer; …

View.DataController.Append;

ARecIndex := View.DataController.FocusedRecordIndex;

View.DataController.Values[ARecIndex, SomeItemIndex] := SomeValue; View.DataController.Post;

另外一种方法是使用View.DataController.DataSource.DataSet得到底层数据集后,再用数据集的

方法来操作数据。

========================================================================

激活内置编辑控件

1) .Controller.EditingController.ShowEdit();

2) .Controller.EditingController.StartEditShowingTimer(); 3) .Controller.EditingItem := ; 4) .Editing := True;

隐藏内置编辑控件

.Controller.EditingController.HideEdit(True);

===========================================================================

移除一个分组列

.GroupIndex := -1; .Visible := True;

===========================================================================

保存修改到数据库

procedure .FormClose(Sender: TObject; var Action: TCloseAction); begin

if (.FocusedView <> nil) and (.FocusedView.DataController.EditState <> []) then .FocusedView.DataController.Post; end;

============================================================================

设置内置右键菜单

内置右键菜单包括二个菜单:cxGridStdHeaderMenu, TcxGridStdFooterMenu

uses cxGridStdPopupMenu;

procedure TForm1.cxGridPopupMenu1Popup(ASenderMenu: TComponent; AHitTest: TcxCustomGridHitTest; X, Y: Integer; var AllowPopup: Boolean); begin

if ASenderMenu is TcxGridStdHeaderMenu then

TcxGridStdHeaderMenu(ASenderMenu).OnPopup := StdHeaderMenuPopup; end;

procedure TForm1.StdHeaderMenuPopup(Sender: TObject); var

I: Integer; begin

with TcxGridStdHeaderMenu(Sender).Items do for I := 0 to Count - 1 do

if Items[I].Caption = 'Group By Box' then begin

Items[I].Enabled := False; System.Break; end end;

===========================================================================

得到选中记录的值

1) View.DataController.DataModeController.GridMode = False时

RecIdx := View.Controller.SelectedRecords[i].RecordIndex;

ColIdx := View.DataController.GetItemByFieldName(AFieldName).Index; OutputVal := View.DataController.Values[RecIdx, ColIdx];

//RecID := View.DataController.GetRecordId(RecIdx);

//OutputVal := ADataSet.Lookup(View.DataController.KeyFieldNames, RecID, AFieldName);

2) View.DataController.DataModeController.GridMode = True时

Bkm := View.DataController.GetSelectedBookmark(ASelectedRecordIndex); if ADataSet.BookmarkValid(TBookmark(Bkm)) then begin

ADataSet.Bookmark := TBookmark(Bkm);

本文来源:https://www.bwwdw.com/article/h295.html

Top