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+";

   }

 }

}