Hello,
From tutorial http://docs.telerik.com/devtools/silverlight/controls/radgridview/filtering/programmatic.html
I have a small code sample which demonstrates above link. When I set IColumnFilterDescriptor.FieldFilter.LogicalOperator = Or. The data load correct. But after If i click AcctNo filter column then the combobox "LogicalOperator" is not update(still load "And" default.....).
Here is the MainPage xaml:
<UserControl x:Class="SaveAndLoadFilterRadGridView.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400"
xmlns:telerik="clr-namespace:Telerik.Windows.Controls;assembly=Telerik.Windows.Controls.GridView"
xmlns:telerikPager="clr-namespace:Telerik.Windows.Controls;assembly=Telerik.Windows.Controls.Data">
<Grid x:Name="LayoutRoot" Background="White">
<telerik:RadGridView AutoGenerateColumns="False" ItemsSource="{Binding PendingCalls}" Name="dataGrid"
SelectionMode = "Single" IsReadOnly ="True"
Margin="10,0,10,0" MinHeight="200"
Filtered="dataGrid_Filtered">
<telerik:RadGridView.Columns>
<telerik:GridViewDataColumn DataMemberBinding="{Binding InstitutionName, Mode=TwoWay}" Header="InstitutionName" IsReadOnly="True" Width="Auto" />
<telerik:GridViewDataColumn DataMemberBinding="{Binding AcctNo, Mode=TwoWay}" Header="AcctNo" IsReadOnly="True" Width="Auto" />
<telerik:GridViewDataColumn DataMemberBinding="{Binding FullName, Mode=TwoWay}" Header="FullName" IsReadOnly="True" Width="Auto" />
</telerik:RadGridView.Columns>
</telerik:RadGridView>
<telerikPager:RadDataPager Margin="10,0,10,0" Grid.Row="1" Source="{Binding Items, ElementName=dataGrid}" PageSize="{Binding CRMPageSize}" />
</Grid>
</UserControl>
And the behind code MainPage.xaml.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Collections.ObjectModel;
using Telerik.Windows.Controls;
using Telerik.Windows.Controls.GridView;
using Telerik.Windows.Data;
namespace SaveAndLoadFilterRadGridView
{
public partial class MainPage : UserControl
{
private ObservableCollection<DataTest> PendingCalls { get; set; }
private IColumnFilterDescriptor AcctNoFilter { get; set; }
public MainPage()
{
InitializeComponent();
LoadDataToGrid();
GridViewColumn acctNoCol = this.dataGrid.Columns["AcctNo"];
AcctNoFilter = acctNoCol.ColumnFilterDescriptor;
LoadFilterList();
}
private void dataGrid_Filtered(object sender, Telerik.Windows.Controls.GridView.GridViewFilteredEventArgs e)
{
#region Save To Database
string operatorFilter1 = AcctNoFilter.FieldFilter.Filter1.Operator.ToString();
string valueFilter1 = AcctNoFilter.FieldFilter.Filter1.Value.ToString();
string logicalOperator = AcctNoFilter.FieldFilter.LogicalOperator.ToString();
string operatorFilter2 = AcctNoFilter.FieldFilter.Filter2.Operator.ToString();
string valueFilter2 = AcctNoFilter.FieldFilter.Filter2.Value.ToString();
#endregion
}
private void LoadDataToGrid()
{
PendingCalls = new ObservableCollection<DataTest>() { new DataTest("Institu 1", "1", "Name 1"),
new DataTest("Institu 2", "2", "Name 2"),
new DataTest("Institu 3", "3", "Name 3"),
new DataTest("Institu 4", "4", "Name 4"),
new DataTest("Institu 5", "5", "Name 5")};
this.dataGrid.ItemsSource = PendingCalls;
}
/// <summary>
/// Load From Database
/// </summary>
private void LoadFilterList()
{
// Suspend the notifications to avoid multiple data engine updates
this.dataGrid.FilterDescriptors.SuspendNotifications();
#region AcctNoFilter
AcctNoFilter.DistinctFilter.AddDistinctValue("1");
AcctNoFilter.DistinctFilter.AddDistinctValue("2");
AcctNoFilter.FieldFilter.Filter1.Operator = FilterOperator.IsNotEqualTo;
AcctNoFilter.FieldFilter.Filter1.Value = "5";
AcctNoFilter.FieldFilter.Filter1.IsCaseSensitive = true;
// The logical operator between the two field filters.
AcctNoFilter.FieldFilter.LogicalOperator = FilterCompositionLogicalOperator.Or;
AcctNoFilter.FieldFilter.Filter2.Operator = FilterOperator.EndsWith;
AcctNoFilter.FieldFilter.Filter2.Value = "2";
AcctNoFilter.FieldFilter.Filter2.IsCaseSensitive = true;
#endregion
// Resume the notifications to force the data engine to update the filter.
this.dataGrid.FilterDescriptors.ResumeNotifications();
}
}
public class DataTest
{
public DataTest(string _InstitutionName, string _AcctNo, string _FullName)
{
InstitutionName = _InstitutionName;
AcctNo = _AcctNo;
FullName = _FullName;
}
public string InstitutionName { get; set; }
public string AcctNo { get; set; }
public string FullName { get; set; }
}
}
I am using Telerik controls 2012.1.424.1040 in a Silverlight 4 project.
Please review code or see attach image.
Here are the steps to reproduce:
1/ Load filter data from database (LogicalOperator = Or)
2/ The data loaded correct
3/ Select filter from column AcctNo
4/ LogicalOperator combobox display value "And" - This is incorrect!!
Many thanks,
VietTQ