In This Topic
    In This Topic

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