Xceed Toolkit Plus for WPF v4.6 Documentation
Providing custom distinct values

The following example demonstrates how to provide custom distinct values that will display the only the month in columns that display DateTime values and that will filter according to a value range for a decimal column.

XAML
Copy Code
<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}"
                                        AutoFilterMode="And"
                                        DefaultCalculateDistinctValues="False">
        <xcdg:DataGridCollectionViewSource.ItemProperties>
          <xcdg:DataGridItemProperty Name="OrderDate"
                                     QueryDistinctValue="DataGridItemProperty_QueryDistinctValue_Date"
                                     CalculateDistinctValues="True"/>
          <xcdg:DataGridItemProperty Name="RequiredDate"
                                     QueryDistinctValue="DataGridItemProperty_QueryDistinctValue_Date"
                                     CalculateDistinctValues="True" />
          <xcdg:DataGridItemProperty Name="ShippedDate"
                                     QueryDistinctValue="DataGridItemProperty_QueryDistinctValue_Date"
                                     CalculateDistinctValues="True" />
          <xcdg:DataGridItemProperty Name="Freight"
                                     QueryDistinctValue="DataGridItemProperty_QueryDistinctValue_Range"
                                     CalculateDistinctValues="True" />
        </xcdg:DataGridCollectionViewSource.ItemProperties>
     </xcdg:DataGridCollectionViewSource>
  
  </Grid.Resources>
  <xcdg:DataGridControl x:Name="OrdersGrid"
                        ItemsSource="{Binding Source={StaticResource cvs_orders}}"/>
</Grid>
VB.NET
Copy Code
Private Sub DataGridItemProperty_QueryDistinctValue_Date( ByVal sender As Object, ByVal e As QueryDistinctValueEventArgs )
  If TypeOf e.DataSourceValue Is DateTime Then
    e.DistinctValue = CDate( e.DataSourceValue ).ToString( "MMMM" )
  End If
End Sub
Private Sub DataGridItemProperty_QueryDistinctValue_Range( ByVal sender As Object, ByVal e As QueryDistinctValueEventArgs )
  If TypeOf e.DataSourceValue Is Decimal Then
    Dim value As Decimal = CDec( e.DataSourceValue )
    If value <= 100 Then
      e.DistinctValue = "0 - 100"
    ElseIf( value > 100 And value <= 500 ) Then
      e.DistinctValue = "101 - 500"
    Else
      e.DistinctValue = "500+"
    End If
  End If
End Sub
C#
Copy Code
private void DataGridItemProperty_QueryDistinctValue_Date( object sender, QueryDistinctValueEventArgs e )
{
 if( e.DataSourceValue is DateTime )
 {
   e.DistinctValue = ( ( DateTime )e.DataSourceValue ).ToString( "MMMM" );
 }
}
private void DataGridItemProperty_QueryDistinctValue_Range( object sender, QueryDistinctValueEventArgs e )
{
 if( e.DataSourceValue is decimal )
 {
   decimal value = ( decimal )e.DataSourceValue;
   if( value <= 100 )
   {
     e.DistinctValue = "0 - 100";
   }
   else if( value > 100 && value <= 500 )
   {
     e.DistinctValue = "101 - 500";
   }
   else
   {
     e.DistinctValue = "500+";
   }
 }
}