Xceed Grid for WinForms v4.3 Documentation
Welcome to Xceed Grid for WinForms v4.3 / Basic Concepts / Events / InitializingDetailGrid event

In This Topic
    InitializingDetailGrid event
    In This Topic

    The InitializingDetailGrid event is raised for each DataRow about to be added to the main grid or one of the detail grids to initialize its detail grid(s).

    Basic steps - C#

    To subscribe to the InitializingDetailGrid event, the following steps must be performed:

    • Obtain a reference to a GridControl or DetailGrid object. 

    • Subscribe to the InitializingDetailGrid event of the GridControl or DetailGrid object using the InitializingDetailGridEventHandler delegate class. 

    • Create a new method that will handle the events that are raised. 

    • Place the desired code in the newly created event handler.

    Basic steps - VB.NET

    To subscribe to the InitializingDetailGrid event, the following steps must be performed:

    • Obtain a reference to a GridControl or DetailGrid object. 

    • Subscribe to the InitializingDetailGrid event of the GridControl or DetailGrid object using the AddHandler/AddressOf keywords. 

    • Create a new method that will handle the events that are raised. 

    • Place the desired code in the newly created event handler.

    Demonstration

    The following example demonstrates how to use the InitializingDetailGrid event to populate the contents of a detail grid according to the values of its parent DataRow.

    VB.NET
    Copy Code
    Dim grid As New GridControl()
    grid.BeginInit()           
    Me.Controls.Add( grid )
    grid.Dock = DockStyle.Fill     
    grid.FixedHeaderRows.Add( New ColumnManagerRow() )
    ' Populate the main grid with data. For the purposes of this example
    ' we will only add 2 DataRows to the main grid.
    grid.Columns.Add( New Column( "FirstName", GetType( string ) ) )
    grid.Columns.Add( New Column( "LastName", GetType( string ) ) )
    grid.Columns.Add( New Column( "FamilyID", GetType( integer ) ) )
    grid.Columns.Add( New Column( "Occupation", GetType( string ) ) )     
    Dim row1 As Xceed.Grid.DataRow = grid.DataRows.AddNew()
    row1.Cells( "FirstName" ).Value = "Peter"
    row1.Cells( "LastName" ).Value = "Griffin"
    row1.Cells( "FamilyID" ).Value = 1
    row1.Cells( "Occupation" ).Value = "Fisherman"
    row1.EndEdit()
    Dim row2 As Xceed.Grid.DataRow = grid.DataRows.AddNew()
    row2.Cells( "FirstName" ).Value = "Homer"
    row2.Cells( "LastName" ).Value = "Simpson"
    row2.Cells( "FamilyID" ).Value = 2
    row2.Cells( "Occupation" ).Value = "Nuclear Technician"
    row2.EndEdit()      
    ' Create the detail grid that will contain our detail data.
    Dim detail As New DetailGrid()
    detail.HeaderRows.Add( New ColumnManagerRow() )
    ' Add the columns to our detail grid
    detail.Columns.Add( New Column( "FirstName", GetType( string ) ) )
    detail.Columns.Add( New Column( "Relationship", GetType( string ) ) )
    detail.Columns.Add( New Column( "FamilyID", GetType( integer ) ) )
    ' Add our detail grid to the main grid's collection of DetailGridTemplates.
    grid.DetailGridTemplates.Add( detail )
    ' Subscribe to the InitializingNewDetailGrid event so we can provide
    ' detail data to our detail grids according to the values of their
    ' parent DataRows.
    AddHandler grid.InitializingDetailGrid, AddressOf Me.init_details      
    grid.EndInit()
    ' Fill our detail grids with data!
    Private Sub init_details( ByVal sender As object, ByVal e As InitializingDetailGridEventArgs )
      Select Case CType( e.Grid.ParentDataRow.Cells( "FamilyID" ).Value, Integer )
        Case 1:
          Dim row1 As Xceed.Grid.DataRow = e.Grid.DataRows.AddNew()
          row1.Cells( "FirstName" ).Value = "Lois"
          row1.Cells( "Relationship" ).Value = "Wife"
          row1.Cells( "FamilyID" ).Value = 1
          row1.EndEdit()     
          Dim row2 As Xceed.Grid.DataRow = e.Grid.DataRows.AddNew()
          row2.Cells( "FirstName" ).Value = "Meg"
          row2.Cells( "Relationship" ).Value = "Daughter"
          row2.Cells( "FamilyID" ).Value = 1
          row2.EndEdit()
          
          Dim row3 As Xceed.Grid.DataRow = e.Grid.DataRows.AddNew()
          row3.Cells( "FirstName" ).Value = "Chris"
          row3.Cells( "Relationship" ).Value = "Son"
          row3.Cells( "FamilyID" ).Value = 1
          row3.EndEdit()
     
          ' ...;
     
        Case 2:
          Dim row1 As Xceed.Grid.DataRow = e.Grid.DataRows.AddNew()
          row1.Cells( "FirstName" ).Value = "Marge"
          row1.Cells( "Relationship" ).Value = "Wife"
          row1.Cells( "FamilyID" ).Value = 2
          row1.EndEdit() 
          
          Dim row2 As Xceed.Grid.DataRow = e.Grid.DataRows.AddNew()
          row2.Cells( "FirstName" ).Value = "Bart"
          row2.Cells( "Relationship" ).Value = "Son"
          row2.Cells( "FamilyID" ).Value = 2
          row2.EndEdit()
     
          ' ...
       End Select
    End Sub
    C#
    Copy Code
    GridControl grid = new GridControl();
     
    grid.BeginInit();
                
    this.Controls.Add( grid );
    grid.Dock = DockStyle.Fill;
          
    grid.FixedHeaderRows.Add( new ColumnManagerRow() );
     
    // Populate the main grid with data. For the purposes of this example
    // we will only add 2 DataRows to the main grid.
    grid.Columns.Add( new Column( "FirstName", typeof( string ) ) );
    grid.Columns.Add( new Column( "LastName", typeof( string ) ) );
    grid.Columns.Add( new Column( "FamilyID", typeof( int ) ) );
    grid.Columns.Add( new Column( "Occupation", typeof( string ) ) );      
          
    Xceed.Grid.DataRow row1 = grid.DataRows.AddNew();
    row1.Cells[ "FirstName" ].Value = "Peter";      
    row1.Cells[ "LastName" ].Value = "Griffin";
    row1.Cells[ "FamilyID" ].Value = 1;
    row1.Cells[ "Occupation" ].Value = "Fisherman";
    row1.EndEdit();
     
    Xceed.Grid.DataRow row2 = grid.DataRows.AddNew();
    row2.Cells[ "FirstName" ].Value = "Homer";
    row2.Cells[ "LastName" ].Value = "Simpson";
    row2.Cells[ "FamilyID" ].Value = 2;
    row2.Cells[ "Occupation" ].Value = "Nuclear Technician";
    row2.EndEdit();      
     
    // Create the detail grid that will contain our detail data.
    DetailGrid detail = new DetailGrid();      
     
    detail.HeaderRows.Add( new ColumnManagerRow() );
     
    // Add the columns to our detail grid
    detail.Columns.Add( new Column( "FirstName", typeof( string ) ) );
    detail.Columns.Add( new Column( "Relationship", typeof( string ) ) );
    detail.Columns.Add( new Column( "FamilyID", typeof( int ) ) );
     
    // Add our detail grid to the main grid's collection of DetailGridTemplates.
    grid.DetailGridTemplates.Add( detail );  
     
    // Subscribe to the InitializingNewDetailGrid event so we can provide
    // detail data to our detail grids according to the values of their
    // parent DataRows.
    grid.InitializingDetailGrid += new InitializingDetailGridEventHandler( this.init_details );
          
    grid.EndInit();
     
    // Fill our detail grids with data!
    private void init_details( object sender, InitializingDetailGridEventArgs e )
    {
      switch( ( int )e.Grid.ParentDataRow.Cells[ "FamilyID" ].Value )
      {
        case 1:
        {
          Xceed.Grid.DataRow row1 = e.Grid.DataRows.AddNew();
          row1.Cells[ "FirstName" ].Value = "Lois";
          row1.Cells[ "Relationship" ].Value = "Wife";
          row1.Cells[ "FamilyID" ].Value = 1;
          row1.EndEdit(); 
           
          Xceed.Grid.DataRow row2 = e.Grid.DataRows.AddNew();
          row2.Cells[ "FirstName" ].Value = "Meg";
          row2.Cells[ "Relationship" ].Value = "Daughter";
          row2.Cells[ "FamilyID" ].Value = 1;
          row2.EndEdit(); 
     
          Xceed.Grid.DataRow row3 = e.Grid.DataRows.AddNew();
          row3.Cells[ "FirstName" ].Value = "Chris";
          row3.Cells[ "Relationship" ].Value = "Son";
          row3.Cells[ "FamilyID" ].Value = 1;
          row3.EndEdit(); 
     
          // ...         
          break;
        }
        case 2:
        {
          Xceed.Grid.DataRow row1 = e.Grid.DataRows.AddNew();
          row1.Cells[ "FirstName" ].Value = "Marge";
          row1.Cells[ "Relationship" ].Value = "Wife";
          row1.Cells[ "FamilyID" ].Value = 2;
          row1.EndEdit(); 
          
          Xceed.Grid.DataRow row2 = e.Grid.DataRows.AddNew();
          row2.Cells[ "FirstName" ].Value = "Bart";
          row2.Cells[ "Relationship" ].Value = "Son";
          row2.Cells[ "FamilyID" ].Value = 2;
          row2.EndEdit(); 
     
          // ...
          break;
        }
      }
    }