Xceed DataGrid for WPF v7.2 Documentation
Providing Unbound Data

The following example demonstrates how to use an unbound item property to display a calculated value. In this example, the total value of the units in stock.

XAML
Copy Code
<Grid xmlns:xcdg="http://schemas.xceed.com/wpf/xaml/datagrid">

  <Grid.Resources>

     <xcdg:DataGridCollectionViewSource x:Key="cvs_products"

                                        Source="{Binding Source={x:Static Application.Current}, Path=Products}">

        <xcdg:DataGridCollectionViewSource.ItemProperties>

          <xcdg:DataGridUnboundItemProperty Name="TotalUnitsValue"

                                            DataType="{x:Type sys:Double}"

                                            QueryValue="DataGridUnboundItemProperty_QueryValue" />

        </xcdg:DataGridCollectionViewSource.ItemProperties>

     </xcdg:DataGridCollectionViewSource>

     <local:CurrencyConverter x:Key="currencyConverter" />

  </Grid.Resources>

  <xcdg:DataGridControl x:Name="OrdersGrid"

                        ItemsSource="{Binding Source={StaticResource cvs_products}}">

     <xcdg:DataGridControl.Columns>

        <xcdg:Column FieldName="TotalUnitsValue"

                     Title="Total Inventory">

           <xcdg:Column.CellContentTemplate>

              <DataTemplate>

                 <TextBlock Text="{Binding Converter={StaticResource currencyConverter}}" />

              </DataTemplate>

           </xcdg:Column.CellContentTemplate>

        </xcdg:Column>

        <xcdg:Column FieldName="Photo"

                     Visible="False" />           

     </xcdg:DataGridControl.Columns>

  </xcdg:DataGridControl>

</Grid>

The following code provides the implementation of the QueryValue event in which the unbound value will be calculated and returned.

VB.NET
Copy Code
Private Sub DataGridUnboundItemProperty_QueryValue( ByVal sender As Object, ByVal e As DataGridItemPropertyQueryValueEventArgs )

  Dim System.Data.DataRowView As row = TryCast( e.Item, System.Data.DataRowView )

  If Not row Is Nothing Then

    If( row( "UnitsInStock" ) <> DBNull.Value ) Then

      e.Value = CDouble( CInt( row( "UnitsInStock" ) ) * CDec( row( "UnitPrice" ) )

    End If

  End If

End Sub
C#
Copy Code
private void DataGridUnboundItemProperty_QueryValue( object sender, DataGridItemPropertyQueryValueEventArgs e )

{

 System.Data.DataRowView row = e.Item as System.Data.DataRowView;

 if( row != null )

 {

   if( row[ "UnitsInStock" ] != DBNull.Value )

   {

     e.Value = ( double )( ( short )row[ "UnitsInStock" ] * ( decimal )row[ "UnitPrice" ] );

   }

 }

}