Xceed Toolkit Plus for WPF v5.0 Documentation
Xceed.Wpf.DataGrid Assembly / Xceed.Wpf.DataGrid Namespace / Column Class / ForeignKeyConfiguration Property
Example


In This Topic
    ForeignKeyConfiguration Property (Column)
    In This Topic
    Gets or sets a ForeignKeyConfiguration through which the visual representation of a foreign key description can be configured.
    Syntax
    'Declaration
     
    Public Property ForeignKeyConfiguration As ForeignKeyConfiguration
    'Usage
     
    Dim instance As Column
    Dim value As ForeignKeyConfiguration
     
    instance.ForeignKeyConfiguration = value
     
    value = instance.ForeignKeyConfiguration
    public ForeignKeyConfiguration ForeignKeyConfiguration {get; set;}

    Property Value

    A reference to a ForeignKeyConfiguration through which the visual representation of a foreign key description can be configured.
    Remarks
    By default, if a CellContentTemplate is specified, the same template will be applied to the foreign key configuration (see EmployeeID column in Example 1). For simpler configurations, or when a cell-content template is not required, a configuration's ValuePath and DisplayMemberPath can be used to indicate the path to the value on the source object that corresponds to the "key" and the path to its its visual representation, respectively (see ShipVia and CustomerID columns in Example).
    Example
    All examples in this topic assume that the grid is bound to the Orders table of the Northwind database or a collection of Person objects, unless stated otherwise.
    The following example demonstrates how to define foreign key configurations for foreign key descriptions that were automatically created from the constraints extracted from the underlying DataTable.
    <Grid xmlns:xcdg="http://schemas.xceed.com/wpf/xaml/datagrid">
     <Grid.Resources>
        <xcdg:DataGridCollectionViewSource x:Key="cvs_orders"
                                           Source="{Binding Source={x:Static Application.Current}, Path=Orders}"
                                           AutoCreateForeignKeyDescriptions="True"/>
     </Grid.Resources>      
     
     <xcdg:DataGridControl x:Name="OrdersGrid"
                           ItemsSource="{Binding Source={StaticResource cvs_orders}}"
                           AutoCreateForeignKeyConfigurations="True">
        <xcdg:DataGridControl.Columns>
           <xcdg:Column FieldName="EmployeeID"
                        Title="Employee">
              <xcdg:Column.CellContentTemplate>
                 <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                       <TextBlock Text="{Binding FirstName}" />
                       <TextBlock Text=" " />
                       <TextBlock Text="{Binding LastName}" />
                    </StackPanel>
                 </DataTemplate>
              </xcdg:Column.CellContentTemplate>
           </xcdg:Column>
           <xcdg:Column FieldName="CustomerID"
                        Title="Customer">
              <xcdg:Column.ForeignKeyConfiguration>
                 <xcdg:ForeignKeyConfiguration DisplayMemberPath="CompanyName"
                                               ValuePath="CustomerID" />
              </xcdg:Column.ForeignKeyConfiguration>
           </xcdg:Column>
           
           <xcdg:Column FieldName="ShipVia"
                        Title="Shipping Company">
              <xcdg:Column.ForeignKeyConfiguration>
                 <xcdg:ForeignKeyConfiguration DisplayMemberPath="CompanyName"
                                               ValuePath="ShipperID" />
              </xcdg:Column.ForeignKeyConfiguration>
           </xcdg:Column>
        </xcdg:DataGridControl.Columns>
     </xcdg:DataGridControl>
    </Grid>
    The following example demonstrates how to bind the grid directly to a BindingList objects and provide a custom key/value mapping through a ForeignKeyConverter, which will return the appropriate employee first and last names for the provided employee ID.
    <Grid xmlns:xcdg="http://schemas.xceed.com/wpf/xaml/datagrid">
      <Grid.Resources>
         <local:OccupationToStringConverter x:Key="occupationToStringConverter" />
         <local:PersonForeignKeyConverter x:Key="personForeignKeyConverter" />
    
         <ObjectDataProvider x:Key="occupationValues"
                             MethodName="GetValues"
                             ObjectType="{x:Type sys:Enum}">
            <ObjectDataProvider.MethodParameters>
               <x:Type TypeName="local:Occupation" />
            </ObjectDataProvider.MethodParameters>
         </ObjectDataProvider>
    
      </Grid.Resources>     
     
      <xcdg:DataGridControl x:Name="PersonsGrid"
                            ItemsSource="{Binding Source={x:Static Application.Current}, Path=Persons}">
    
        <xcdg:DataGridControl.Columns>
           <xcdg:Column FieldName="Occupation">
              <xcdg:Column.CellContentTemplate>
                 <DataTemplate>
                    <TextBlock Text="{Binding Converter={StaticResource occupationToStringConverter}}" />
                 </DataTemplate>
              </xcdg:Column.CellContentTemplate>
              <xcdg:Column.ForeignKeyConfiguration>
                 <xcdg:ForeignKeyConfiguration ItemsSource="{Binding Source={StaticResource occupationValues}}" />
              </xcdg:Column.ForeignKeyConfiguration>
           </xcdg:Column>
           <xcdg:Column FieldName="ReportsTo">
              <xcdg:Column.CellContentTemplate>
                 <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                       <TextBlock Text="{Binding FirstName}" />
                       <TextBlock Text=" " />
                       <TextBlock Text="{Binding LastName}" />
                    </StackPanel>
                 </DataTemplate>
              </xcdg:Column.CellContentTemplate>
              <xcdg:Column.ForeignKeyConfiguration>
                 <xcdg:ForeignKeyConfiguration ItemsSource="{Binding Source={x:Static Application.Current}, Path=Persons}"
                                               ForeignKeyConverter="{StaticResource personForeignKeyConverter}"
                                               ValuePath="PersonID"/>
              </xcdg:Column.ForeignKeyConfiguration>
           </xcdg:Column>
        </xcdg:DataGridControl.Columns>
      </xcdg:DataGridControl>
    </Grid>
    The following code provides the implementation of the PersonForeignKeyConverter class.
    Public Class PersonForeignKeyConverter
                 Inherits ForeignKeyConverter
    
      Public Overrides Function GetKeyFromValue( value As Object, configuration As ForeignKeyConfiguration ) As Object
        Dim bindingList As PersonBindingList = TryCast( configuration.ItemsSource, PersonBindingList )
        If Not bindingList Is Nothing Then
          Dim person As Person = TryCast( value, Person )
          If Not person Is Nothing Then
            Return person.PersonID
          End If
        End If
        Return -1
      End Function
      Public Overrides Function GetValueFromKey( key As Object, configuration As ForeignKeyConfiguration ) As Object
       Dim bindingList As PersonBindingList = TryCast( configuration.ItemsSource, PersonBindingList )
        If Not bindingList Is Nothing Then
          Try
            Dim personID As Integer = CInt( key )
            Dim person As Person
            For Each person In bindingList
              If person.PersonID = personID Then
                Return person
              End If
            Next person
          Catch e As Exception
            ' key can be nothing
          End Try
        Return Nothing
      End Function
    End Class
    The following code provides the implementation of the PersonForeignKeyConverter class.
    public class PersonForeignKeyConverter : ForeignKeyConverter
    {
     public override object GetKeyFromValue( object value, ForeignKeyConfiguration configuration )
     {
       PersonBindingList bindingList = configuration.ItemsSource as PersonBindingList;
       if( bindingList != null )
       {
         Person person = value as Person;
         if( person != null )
         {
           return person.PersonID;
         }
       }
       return -1;
     }
     public override object GetValueFromKey( object key, ForeignKeyConfiguration configuration )
     {
       PersonBindingList bindingList = configuration.ItemsSource as PersonBindingList;
       if( bindingList != null )
       {
         try
         {
           int personID = ( int )key;
           foreach( Person person in bindingList )
           {
             if( person.PersonID == personID )
             {
               return person;
             }
           }
         }
         catch( Exception )
         {
           // key can be null
         }
       }
       return 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

    Column Class
    Column Members

    DataGrid Fundamentals

    Foreign Key Detection