How to force the grid to have one master row always expanded
If you want your grid to have only a single detail View always expanded, there can be two different solutions to this problem:
1) If you don't need automatic sorting, grouping, summary calculation in the grid, this feature can be easily implemented if you use both GridViews in standard GridMode. Please note, in this case all the features we mentioned will be disabled. Please review the "Grid Mode: Master-Detail" topic from our documentation to learn how to adjust the grid and its DataSets properly.
2) Another solution which will allow you to implement this feature is to handle the DataController's OnDetailExpanding and OnDetailCollapsing events. Please note that these events are declared as public, so you need to define their handlers in code:
[Delphi]
procedure TForm1.ADetailDataControllerCollapsing( |
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; |