Xceed DataGrid for WPF v7.2 Documentation
GetDetailsForParentItem Method (DataGridDetailDescription)
Example 


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.
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

Reference

DataGridDetailDescription Class
DataGridDetailDescription Members