您的位置:首页 > 编程语言 > Delphi

Delphi CxGrid 汇总(3)

2013-11-28 10:19 501 查看


解决:

<aColumn>.GroupIndex := -1;

<aColumn>.Visible := True;

****************************************************************************

39 保存修改到数据库

解决:

procedure <aForm>.FormClose(Sender: TObject; var Action: TCloseAction);

begin

if (<aGrid>.FocusedView <> nil)

and (<aGrid>.FocusedView.DataController.EditState <> []) then

<aGrid>.FocusedView.DataController.Post;

end;

****************************************************************************

40 设置内置右键菜单

解决:

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

[delphi] view
plaincopy

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;

****************************************************************************

41 得到选中记录的值

解决:

[delphi] view
plaincopy

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);

OutputVal := ADataSet.FieldByName(AFieldName).Value;

end;

View.BeginUpdate;

View.DataController.BeginLocate;

try

// make changes here…

finally

View.DataController.EndLocate;

View.EndUpdate;

end;

****************************************************************************

42 在GridMode禁用内置的右键Footer菜单

解决:

uses cxGridStdPopupMenu;

procedure cxGridPopupMenuOnPopup(...)

begin

if (ASenderMenu is TcxGridStdFooterMenu) and

<GridView>.DataController.DataModeController.GridMode then

AllowPopup := False;

end;

****************************************************************************

43 主从表任何时候只能展开一个组

解决:

[delphi] view
plaincopy

procedure TForm1.ADetailDataControllerCollapsin( ADataController: TcxCustomDataController;

ARecordIndex: Integer; var AAllow: Boolean);

var

I: Integer;

C: Integer;

begin

AAllow := False;

C := 0;

for I := 0 to ADataController.RecordCount - 1 do

begin

if ADataController.GetDetailExpanding(I) then

Inc(C);

if C > 1 then

AAllow := True;

end;

end;

procedure TForm1.ADetailDataControllerExpanding(

ADataController: TcxCustomDataController; ARecordIndex: Integer;

var AAllow: Boolean);

begin

ADataController.CollapseDetails;

end;

procedure TForm1.FormCreate(Sender: TObject);

begin cxGrid1DBTableView1.DataController.OnDetailExpanding:=ADetailDataControllerExpanding; cxGrid1DBTableView1.DataController.OnDetailCollapsing:=ADetailDataControllerCollapsing;

end;

****************************************************************************

44 动态创建层次(Level)和视图(View)

解决:

var

Grid: TcxGrid;

Level: TcxGridLevel;

View: TcxGridDBTableView;

begin

// Creates a Grid instance

Grid := TcxGrid.Create(SomeOwner);

Grid.Parent := SomeParent;

// Creates a Level

Level := Grid.Levels.Add;

Level.Name := 'SomeLevelName';

// Creates a View

View := Grid.CreateView(TcxGridDBTableView) as TcxGridDBTableView;

View.Name := 'SomeViewName';

// … and binds it to the Level

Level.GridView := View;

// Hooks up the View to the data

View.DataController.DataSource := SomeDataSource;

// … and creates all columns

View.DataController.CreateAllItems;

end;

****************************************************************************

45 获得Group Footer合计行对应的记录

解决:

[delphi] view
plaincopy

procedure TForm1.cxGrid1DBTableView1CustomDrawFooterCell(

Sender: TcxGridTableView; ACanvas: TcxCanvas;

AViewInfo: TcxGridColumnHeaderViewInfo; var ADone: Boolean);

var

ALevel, ADataGroupIndex: Integer;

AGridRecord, AGroupRecord: TcxCustomGridRecord;

begin

if AViewInfo is TcxGridRowFooterCellViewInfo and // Row footer

(TcxGridDBColumn(AViewInfo.Column).DataBinding.FieldName = 'Area') then // Area column

begin

AGridRecord:= TcxGridRowFooterCellViewInfo(AViewInfo).GridRecord;

ALevel:= TcxGridRowFooterCellViewInfo(AViewInfo).Container.GroupLevel;

ADataGroupIndex:=Sender.DataController.Groups.DataGroupIndexByRowIndex[AGridRecord.Index];

if ADataGroupIndex <> -1 then

begin

AGroupRecord := AGridRecord;

while AGroupRecord.Level <> ALevel do

AGroupRecord := AGroupRecord.ParentRecord;

AViewInfo.Text := AGroupRecord.DisplayTexts[0];

end;

end;

end;

****************************************************************************

46 访问过滤之后的记录

解决:

var

I: Integer;

begin

Memo1.Lines.Clear;

with cxGrid1DBTableView1.DataController do

for I := 0 to FilteredRecordCount - 1 do

Memo1.Lines.Add(DisplayTexts[FilteredRecordIndex[I], 0]);

end;

****************************************************************************

47 获得单元的Font

解决:

cxGrid1DBTableView1.ViewInfo.RecordsViewInfo.Items[1].GetCellViewInfoByItem(

cxGrid1DBTableView1Company).EditViewInfo.Font;

****************************************************************************

48 根据Level名称找到Level对象

解决:

[delphi] view
plaincopy

function GetLevelByName(AGrid: TcxGrid; ALevelName: string): TcxGridLevel;

function LoopThroughLevels(ALevel: TcxGridLevel; ALevelName: string): TcxGridLevel;

var

I: Integer;

begin

Result := nil;

for I := 0 to ALevel.Count - 1 do

begin

if ALevel[I].Name = ALevelName then

begin

Result := ALevel[I];

Exit;

end;

if ALevel[I].Count > 0 then

begin

Result := LoopThroughLevels(ALevel[I], ALevelName);

if Result <> nil then

Exit;

end;

end;

end;

var

I: Integer;

begin

Result := nil;

for I := 0 to AGrid.Levels.Count - 1 do

begin

if AGrid.Levels[I].Name = ALevelName then

begin

Result := AGrid.Levels[I];

Exit;

end;

if AGrid.Levels[I].Count > 0 then

begin

Result := LoopThroughLevels(AGrid.Levels[I], ALevelName);

if Result <> nil then

Exit;

end;

end;

end;

****************************************************************************

49 指定Filter Builder打开/保存过滤文件的默认路径

解决:

uses

..., cxFilterControlDialog;

procedure TForm.GridView1FilterControlDialogShow(

Sender: TObject);

begin

TfmFilterControlDialog(Sender).OpenDialog.InitialDir := 'D:/'

end;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: