Example 57 : using cell controls to show a grid inside a grid

vcl grid inside grid

With improved cell controls support, it is now possible to do something like using a grid inside a grid.

To start with, using cell controls is simple. Any TWinControl descendent can be hosted inside TAdvStringGrid. This is done by assigning the control to the grid.CellControls[col,row]: TWinControl property.


To have a button displayed in cell 2,5 you can use:

grid.CellControls[2,5] := button1;

The same technique can be applied to put a grid inside a grid. Here some additional features will be used. First of all, the grid will be placed in a merged cell. Secondly, the merged cell will be put in a node span to allow collapsing and expanding the row with the secondary grid.

The setup is done by putting the main grids and two secondary grids on a form. With the following code, the secondary grids are bound in the merged  expandable rows of the main grid:

procedure TForm1.FormCreate(Sender: TObject);
  advstringgrid1.RowHeights[2] := 128;
  advstringgrid1.CellControls[1,2] := advstringgrid2;
  advstringgrid1.RowHeights[4] := 128;
  advstringgrid1.CellControls[1,4] := advstringgrid3;

As the secondary grids are placed on the form, all features and capabilities of TAdvStringGrid can be used on the main grid as well as on the secondary grids.

Delphi project & source files for downloading included in the main demos distribution for Delphi.