I implmented the ValueChanged handler... but now it behaves really weird. When leaving/entering the filter textboxes it sometimes filters on the value, somtimes it does not. I have tried setting value = NULL after setting the filter, but that spawns a new problem.
using
System;
using
System.Data;
using
System.Windows.Forms;
using
Telerik.WinControls.UI;
namespace
TelerikGridTest
{
public
partial
class
Form1 : Form
{
private
bool
_canFilter;
private
object
value;
private
Random randomGenerator =
new
Random();
private
const
int
ROWS_COUNT = 50000;
private
string
[] randomStrings;
private
string
[] randomStrings2;
public
Form1()
{
InitializeComponent();
radGridView1.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill;
radGridView1.DataSource = GetTable();
radGridView1.EnableFiltering =
true
;
radGridView1.FilterChanging += RadGridView1_FilterChanging;
radGridView1.CellEndEdit += RadGridView1_CellEndEdit;
radGridView1.ValueChanged += RadGridView1_CellValueChanged;
}
private
void
RadGridView1_CellValueChanged(
object
sender, EventArgs e)
{
value = radGridView1.ActiveEditor.Value;
}
private
DataTable GetTable()
{
randomStrings =
new
string
[20];
for
(
int
i = 0; i <
this
.randomStrings.Length; i++)
{
randomStrings[i] =
"String "
+ (i + 1);
}
randomStrings2 =
new
string
[20];
for
(
int
i = 0; i <
this
.randomStrings2.Length; i++)
{
randomStrings2[i] =
"String2 "
+ (i + 1);
}
DataColumn stringColumn =
new
DataColumn(
"StringColumn"
,
typeof
(
string
));
DataColumn stringColumn2 =
new
DataColumn(
"StringColumn2"
,
typeof
(
string
));
var dataTable =
new
DataTable();
dataTable.Columns.Add(stringColumn);
dataTable.Columns.Add(stringColumn2);
dataTable.BeginLoadData();
for
(
int
i = 0; i < ROWS_COUNT; i++)
{
DataRow row = dataTable.NewRow();
row[
"StringColumn"
] = randomStrings[randomGenerator.Next(0,
this
.randomStrings.Length - 1)];
row[
"StringColumn2"
] = randomStrings2[randomGenerator.Next(0,
this
.randomStrings2.Length - 1)];
dataTable.Rows.Add(row);
}
dataTable.EndLoadData();
return
dataTable;
}
private
void
RadGridView1_CellEndEdit(
object
sender, GridViewCellEventArgs e)
{
if
(radGridView1.CurrentCell
is
GridFilterCellElement)
{
_canFilter =
true
;
GridViewDataColumn col = e.Column
as
GridViewDataColumn;
if
(col !=
null
)
{
if
(col.FilterDescriptor !=
null
&& value != col.FilterDescriptor.Value)
{
col.FilterDescriptor.Value = value;
}
else
{
col.FilterDescriptor =
new
Telerik.WinControls.Data.FilterDescriptor(col.FieldName, GridViewHelper.GetDefaultFilterOperator(col.DataType), e.Value);
}
}
_canFilter =
false
;
}
}
private
void
RadGridView1_FilterChanging(
object
sender, GridViewCollectionChangingEventArgs e)
{
e.Cancel = !_canFilter;
}
}
}