Xceed DataGrid for WPF v7.3 Documentation
Xceed.Wpf.DataGrid Assembly / Xceed.Wpf.DataGrid Namespace / DataGridDetailDescription Class / GetDetailsForParentItem Method
The parent DataGridCollectionView.
The parent data item whose details are to be retrieved.
Example


In This Topic
    GetDetailsForParentItem Method (DataGridDetailDescription)
    In This Topic
    Retrieves the details for the specified parent data item.
    Syntax
    'Declaration
     
    Protected Friend MustOverride Function GetDetailsForParentItem( _
       ByVal parentCollectionView As DataGridCollectionViewBase, _
       ByVal parentItem As Object _
    ) As IEnumerable
    'Usage
     
    Dim instance As DataGridDetailDescription
    Dim parentCollectionView As DataGridCollectionViewBase
    Dim parentItem As Object
    Dim value As IEnumerable
     
    value = instance.GetDetailsForParentItem(parentCollectionView, parentItem)
    protected internal abstract IEnumerable GetDetailsForParentItem( 
       DataGridCollectionViewBase parentCollectionView,
       object parentItem
    )

    Parameters

    parentCollectionView
    The parent DataGridCollectionView.
    parentItem
    The parent data item whose details are to be retrieved.

    Return Value

    An IEnumerable representing the details of the specified data item.
    Example
    All examples in this topic assume that the grid is bound to the Employees table of a LINQ  data context, unless stated otherwise.
    The following example demonstrates how to create and use a custom detail description that handles LINQ detail relations, which are provided by properties to which the AssociationAttribute is applied.
    <Grid>
      <Grid.Resources>
    
        <xcdg:DataGridCollectionViewSource x:Key="cvs_employees"
                                           Source="{Binding Source={x:Static Application.Current},
                                                            Path=LinqDataContext.Employees}">
           <xcdg:DataGridCollectionViewSource.DetailDescriptions>
              <local:LinqToSqlDetailDescription RelationName="Employee_Employees"
                                                Title="Employees" />
              <local:LinqToSqlDetailDescription RelationName="Employee_Customer"
                                                Title="Customers">
                 <local:LinqToSqlDetailDescription.DetailDescriptions>
                    <local:LinqToSqlDetailDescription RelationName="Customer_Order"
                                                      Title="Orders">
                       <local:LinqToSqlDetailDescription.DetailDescriptions>
                          <local:LinqToSqlDetailDescription RelationName="Order_Order_Detail"
                                                            Title="Order Details" />
                       </local:LinqToSqlDetailDescription.DetailDescriptions>
                    </local:LinqToSqlDetailDescription>
                 </local:LinqToSqlDetailDescription.DetailDescriptions>
              </local:LinqToSqlDetailDescription>
           </xcdg:DataGridCollectionViewSource.DetailDescriptions>
        </xcdg:DataGridCollectionViewSource>
      </Grid.Resources>
     
      <xcdg:DataGridControl x:Name="EmployeesGrid"
                          ItemsSource="{Binding Source={StaticResource cvs_employees}}"
                          ItemsSourceName="Employee Information"
                          AutoCreateDetailConfigurations="True" />
    </Grid>
    Imports System
    Imports System.Collections.Generic
    Imports System.Linq
    Imports System.Text
    Imports Xceed.Wpf.DataGrid
    Imports System.Reflection
    Imports System.Data.Linq.Mapping
    Imports System.Diagnostics
    Imports System.Collections
    Namespace Xceed.Wpf.Documentation
      Public Class LinqToSqlDetailDescription
                   Inherits DataGridDetailDescription
        Protected Overrides Function GetDetailsForParentItem( ByVal parentCollectionView As DataGridCollectionView, _
                                                              ByVal parentItem As Object ) As IEnumerable
          Dim parentItemType As Type = parentItem.GetType()
          Dim foundProperty As PropertyInfo = Nothing
          Dim properties() As PropertyInfo = parentItemType.GetProperties()
          Dim propertyInfo As PropertyInfo
          For Each propertyInfo In properties
            Dim attributes() As Object = propertyInfo.GetCustomAttributes( Type.GetType( AssociationAttribute ), _
                                                                            False)
    
            If attributes.GetLength( 0 ) = 0 Then
              Continue
            End If
    
            Dim associationAttribute As AssociationAttribute = CType( attributes( 0 ), AssociationAttribute )
    
            If associationAttribute.Name = Me.RelationName Then
              foundProperty = propertyInfo
              Exit Property
            End If
          Next
    
          If foundProperty Is Nothing Then
            Return New Object()
          Else
            Dim details As Object = foundProperty.GetValue( parentItem, Nothing )
            Dim detailsType As Type = details.GetType()
            Dim getNewBindingList As MethodInfo = detailsType.GetMethod( "GetNewBindingList" )
    
            Return CType( getNewBindingList.Invoke( details, Nothing), IEnumerable )
          End If
        End Function
      End Class
    End Namespace
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Xceed.Wpf.DataGrid;
    using System.Reflection;
    using System.Data.Linq.Mapping;
    using System.Diagnostics;
    using System.Collections;
    namespace Xceed.Wpf.Documentation
    {
     public class LinqToSqlDetailDescription: DataGridDetailDescription
     {
       protected override IEnumerable GetDetailsForParentItem( DataGridCollectionView parentCollectionView,
                                                               object parentItem )
       {
         Type parentItemType = parentItem.GetType();
         PropertyInfo foundProperty = null;
        
         PropertyInfo[] properties = parentItemType.GetProperties();
         foreach( PropertyInfo propertyInfo in properties )
         {
           object[] attributes = propertyInfo.GetCustomAttributes( typeof( AssociationAttribute ), false );
           if( attributes.GetLength( 0 ) == 0 )
             continue;
           AssociationAttribute associationAttribute = ( AssociationAttribute )attributes[ 0 ];
           if( associationAttribute.Name == this.RelationName )
           {
             foundProperty = propertyInfo;
             break;
           }
         }
         if( foundProperty == null )
         {
           return new object[] { };
         }
         else
         {
           object details = foundProperty.GetValue( parentItem, null );
           Type detailsType = details.GetType();
           MethodInfo getNewBindingList = detailsType.GetMethod( "GetNewBindingList" );
    
           return ( IEnumerable )getNewBindingList.Invoke( details, null );
         }
       }
     }
    }
    Requirements

    Target Platforms: Windows 11, Windows, 10, Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2

    See Also