DataGridDetailDescription Class
See Also  Members   Example 
Xceed.Wpf.DataGrid Assembly > Xceed.Wpf.DataGrid Namespace : DataGridDetailDescription Class

The DataGridDetailDescription class provides information about a detail relation whose content will be displayed as the details of the master data items in a grid or as the data items of another detail. This feature is available only in the Professional Edition

Object Model




Syntax

Visual Basic (Declaration) 
Public MustInherit Class DataGridDetailDescription 
   Inherits DependencyObject
C# 
public abstract class DataGridDetailDescription : DependencyObject 

Example

All examples in this topic assume that the grid is bound to the Employees table of a LINQ data context or Northwind database, 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.
XAMLCopy Code
<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>
Visual BasicCopy Code
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
C#Copy Code
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 );
    }
  }
}
}
The following example demonstrates how to explicitly define detail descriptions for the DataRelations found in the DataTable to which the grid is bound and how to calculate statistical functions for a detail description whose results will be displayed in the StatRows contained in the footer sections of the details to which the description's corresponding detail configuration will be applied.
XAMLCopy Code
<Grid> 
  <Grid.Resources> 
     <xcdg:DataGridCollectionViewSource x:Key="cvs_employees" 
                                        Source="{Binding Source={x:Static Application.Current},  
                                                         Path=Employees}"> 
 
       <xcdg:DataGridCollectionViewSource.DetailDescriptions> 
          <xcdg:DataRelationDetailDescription RelationName="Employee_Orders" 
                                              Title="Employee Orders"> 
             <xcdg:DataRelationDetailDescription.DetailDescriptions> 
                <xcdg:DataRelationDetailDescription RelationName="Order_OrderDetails" 
                                                    Title="Order Details"> 
                   <xcdg:DataRelationDetailDescription.ItemProperties> 
                      <xcdg:DataGridItemProperty Name="UnitPrice" /> 
                      <xcdg:DataGridItemProperty Name="Quantity" /> 
                      <xcdg:DataGridItemProperty Name="Discount" /> 
                   </xcdg:DataRelationDetailDescription.ItemProperties> 
                   <xcdg:DataRelationDetailDescription.StatFunctions>                           
                      <xcdg:SumFunction ResultPropertyName="sum_quantity" 
                                        SourcePropertyName="Quantity" /> 
                      <xcdg:AverageFunction ResultPropertyName="average_unitprice" 
                                            SourcePropertyName="UnitPrice" /> 
                   </xcdg:DataRelationDetailDescription.StatFunctions> 
                </xcdg:DataRelationDetailDescription> 
             </xcdg:DataRelationDetailDescription.DetailDescriptions> 
          </xcdg:DataRelationDetailDescription> 
       </xcdg:DataGridCollectionViewSource.DetailDescriptions> 
     </xcdg:DataGridCollectionViewSource> 
  </Grid.Resources> 
  
  <xcdg:DataGridControl x:Name="EmployeesGrid" 
                      ItemsSource="{Binding Source={StaticResource cvs_employees}}" 
                      ItemsSourceName="Employee Information" 
                      AutoCreateDetailConfigurations="True"> 
 
    <xcdg:DataGridControl.DetailConfigurations> 
       <xcdg:DetailConfiguration RelationName="Employee_Orders"> 
          <xcdg:DetailConfiguration.DetailConfigurations> 
             <xcdg:DetailConfiguration RelationName="Order_OrderDetails"> 
                <xcdg:DetailConfiguration.Footers> 
                   <DataTemplate> 
                      <xcdg:StatRow Background="AliceBlue"> 
                         <xcdg:StatCell FieldName="UnitPrice" 
                                        ResultPropertyName="average_unitprice" 
                                        ResultConverterParameter="f2" /> 
                         <xcdg:StatCell FieldName="Quantity" 
                                        ResultPropertyName="sum_quantity" />                              
                      </xcdg:StatRow> 
                   </DataTemplate> 
                </xcdg:DetailConfiguration.Footers> 
             </xcdg:DetailConfiguration> 
          </xcdg:DetailConfiguration.DetailConfigurations> 
       </xcdg:DetailConfiguration> 
     </xcdg:DataGridControl.DetailConfigurations>   
   </xcdg:DataGridControl> 
</Grid>

Inheritance Hierarchy

Requirements

Supported Operating Systems: Windows Server 2003 Service Pack 1; Windows Vista; Windows XP Service Pack 2

See Also