How to reproduce:
public partial class Form1 : Form
{
private DataTable dt = new DataTable();
public Form1()
{
InitializeComponent();
this.FillData();
this.radGridView1.DataSource = this.dt;
this.radGridView1.EnableSorting = true;
this.radGridView1.EnableFiltering = true;
this.radGridView1.MasterTemplate.DataView.BypassSort = true;
this.radGridView1.SortChanged += radGridView1_SortChanged;
this.radGridView1.AutoSizeColumnsMode = Telerik.WinControls.UI.GridViewAutoSizeColumnsMode.Fill;
}
public void FillData()
{
dt.Columns.Add("Id", typeof(int));
dt.Columns.Add("Name", typeof(string));
for (int i = 0; i < 30; i++)
{
dt.Rows.Add(i, "Item" + i);
}
}
private void radGridView1_SortChanged(object sender, Telerik.WinControls.UI.GridViewCollectionChangedEventArgs e)
{
if (e.Action == NotifyCollectionChangedAction.Add || e.Action == NotifyCollectionChangedAction.ItemChanged)
{
SortDescriptor s = e.NewItems[0] as SortDescriptor;
string sortOperator = "";
if (s.Direction == ListSortDirection.Ascending)
{
sortOperator = "ASC";
}
else
{
sortOperator = "DESC";
}
dt.DefaultView.Sort = s.PropertyName + " " + sortOperator;
}
if (e.Action == NotifyCollectionChangedAction.Remove)
{
dt.DefaultView.Sort = "";
}
}
}
Workaround:
public partial class Form1 : Form
{
private DataTable dt = new DataTable();
public Form1()
{
InitializeComponent();
this.FillData();
this.radGridView1.DataSource = this.dt;
this.radGridView1.EnableSorting = true;
this.radGridView1.EnableFiltering = true;
this.radGridView1.MasterTemplate.DataView.BypassSort = true;
this.radGridView1.AutoSizeColumnsMode = Telerik.WinControls.UI.GridViewAutoSizeColumnsMode.Fill;
this.radGridView1.CellBeginEdit += RadGridView1_CellBeginEdit;
this.radGridView1.CellEndEdit += RadGridView1_CellEndEdit;
}
private void RadGridView1_CellEndEdit(object sender, GridViewCellEventArgs e)
{
if (e.Row is GridViewFilteringRowInfo)
{
this.radGridView1.MasterTemplate.DataView.BypassSort = true;
}
}
private void RadGridView1_CellBeginEdit(object sender, Telerik.WinControls.UI.GridViewCellCancelEventArgs e)
{
if (e.Row is GridViewFilteringRowInfo)
{
this.radGridView1.MasterTemplate.DataView.BypassSort = false;
}
}
public void FillData()
{
dt.Columns.Add("Id", typeof(int));
dt.Columns.Add("Name", typeof(string));
for (int i = 0; i < 30; i++)
{
dt.Rows.Add(i, "Item" + i);
}
}
}