The vertical scrolling seems to become very slow and even unresponsive, when the following conditions are met:
To minimize the issue, you can set the GroupRenderMode property of RadGridView to Nested.
Reset by Clear, RemoveRange causes a memory leak of GridViewRow instances (or TreeListViewRow in RadTreeListView).
To work this around, you can call the Clear method of the RadGridView's Items collection and then reset the ItemsSource property.
this.radGridView.Items.Clear();
this.radGridView.ItemsSource = null;
this.radGridView.ItemsSource = newSource;
Edit: The number of instances of the GridViewRow class are relative to the number of containers which cover the visible viewport. They are kep by internal caching mechanism used for faster reuse of containers is data-reload scenarios. Containers are dettached from their previous viewmodels (DataContext).
In non virtualized scenario, the number of the live containers is the same as the number of items in the GridView's ItemsSource and when changing the source, the number remains the same as the items in the source.
We are closing this issue as we think the mentioned internal cache shouldn't be considered a memory problem but rather a powerful performance optimization internal tool for extensive data-refresh scenarios.
This happens in the following scenarios: 1. The FilterMemberPath points to the Date property of a DateTime one. 2. The column name contains "[]" square brackets.
A NullReferenceException can be thrown when quickly editing different cells with a RadMultiColumnComboBox (placed in the CellEditTemplate of the column) and changing the selection.
System.NullReferenceException HResult=0x80004003 Message=Object reference not set to an instance of an object. Source=Telerik.Windows.Controls.GridView StackTrace: at Telerik.Windows.Controls.MultiColumnComboBox.GridViewDropDownContentManager.OnMouseUp(Object sender, MouseButtonEventArgs args) in Telerik.Windows.Controls.MultiColumnComboBox\GridViewDropDownContentManager.cs:line 283
I already have a work-around and I don't have time to craft an example.
When running two dispatchers in different threads, ie launching the following code twice:
public void LaunchInThread()
{
Thread _thread = new Thread(() =>
{
Application app = new Application();
app.Run(new Window());
});
_thread.SetApartmentState(ApartmentState.STA);
_thread.Start();
}
And setting column hierarchical column headers to some but not all columns by code, ie:
if( ! first_column){ column.ColumnGroupName = "groupName"; if (radGridView.ColumnGroups.FirstOrDefault(x => x.Name == "groupName") != null) return; radGridView.ColumnGroups.Add(new GridViewColumnGroup { Header = "groupName", Name = "groupName" }); }
My guess is that when no header is set, by default an static empty GridViewColumnGroup is reused. And as it's non-freezable it crashes.
Currently, if RadGridView is bound to a INotifyCollectionChanged collection and the collection class raises the CollectionChanged event with NotifyCollectionChangedAction set to Add, Remove or Insert, RadGridView is not updating its items properly when the OldItems or NewItems collections contain more than 1 items.
Add support for this scenario.