Xceed DataGrid for WPF v7.2 Documentation
ForeignKeyConfiguration Property (Column)
Example 


Xceed.Wpf.DataGrid Assembly > Xceed.Wpf.DataGrid Namespace > Column Class : ForeignKeyConfiguration Property
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 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 examples demonstrate (1) how to define foreign key configurations for foreign key descriptions that were automatically created from the constraints extracted from the underlying DataTable, and (2) 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>

    <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>
<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 examples provide 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
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