This is a migrated thread and some comments may be shown as answers.

Exception on adding GroupDescriptor

4 Answers 138 Views
GridView
This is a migrated thread and some comments may be shown as answers.
Konrad Sikorski
Top achievements
Rank 1
Konrad Sikorski asked on 13 Sep 2011, 04:51 PM
Hello,

We have update telerik controls from version 2011.1.419.1040 to the newest one and we have got lot of issues.

One of theme is an error when we want to add grouping.
public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();
  
            ucItemsGrid.ItemsSource = new List<object>();
  
            ucItemsGrid.Columns.Add( new GridViewDataColumn{UniqueName = "Title", Header="Title"} );
            ucItemsGrid.GroupDescriptors.Add( new GroupDescriptor{Member = "Status"});
        }
    }
<UserControl x:Class="tmpRadGridGroupingBug.MainPage"
    mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400">
  
    <Grid x:Name="LayoutRoot" Background="White">
        <telerik:RadGridView Name="ucItemsGrid"/>
    </Grid>
</UserControl>

This code works in previous version. Now the NullReferenceException is thrown because of line " ucItemsGrid.ItemsSource = new List<object>(); ". Probably this line looks strange for you but we have some reasons for doing that.

This is exception from our product:
{System.NullReferenceException: Object reference not set to an instance of an object.
at Telerik.Windows.Data.TypeExtensions.DefaultValue(Type type)
at Telerik.Windows.Data.Expressions.ExpressionFactory.DefaltValueExpression(Type type)
at Telerik.Windows.Data.Expressions.ExpressionFactory.MakeMemberAccess(Expression instance, String memberName, Type memberType)
at Telerik.Windows.Data.Expressions.ExpressionFactory.MakeMemberAccess(Expression instance, String memberName, Type memberType, Boolean liftMemberAccessToNull)
at Telerik.Windows.Data.Expressions.PropertyAccessExpressionBuilder.CreateMemberAccessExpressionOverride()
at Telerik.Windows.Data.Expressions.MemberAccessExpressionBuilderBase.CreateMemberAccessExpression()
at Telerik.Windows.Data.GroupDescriptor.CreateGroupKeyExpression(ParameterExpression parameterExpression)
at Telerik.Windows.Data.GroupDescriptorBase.CreateGroupKeyExpression(Expression itemExpression)
at Telerik.Windows.Data.IGroupDescriptorExtensions.GetGroupKeyType(IGroupDescriptor groupDescriptor, Type itemType)
at Telerik.Windows.Data.GroupInfo..ctor(IGroupDescriptor groupDescriptor, Type itemType)
at Telerik.Windows.Data.QueryableCollectionViewGroupRoot..ctor(IEnumerable`1 originalGroups, IEnumerable`1 groupDescriptors, IEnumerable`1 sortDescriptors, Type itemType)
at Telerik.Windows.Data.QueryableCollectionView.EnsureRootGroup()
at Telerik.Windows.Data.QueryableCollectionView.get_Groups()
at Telerik.Windows.Controls.GridView.GridViewItemContainerGenerator.PrepareGrouping()
at Telerik.Windows.Controls.GridView.GridViewItemContainerGenerator.ResetGeneratorAndReuseContainers()
at Telerik.Windows.Controls.GridView.GridViewItemContainerGenerator.ReInitializeContainers()
at Telerik.Windows.Controls.GridView.GridViewDataControl.ReuseContainersOnReset()
at Telerik.Windows.Controls.GridView.GridViewDataControl.OnItemsChanged(NotifyCollectionChangedEventArgs e)
at Telerik.Windows.Controls.GridView.BaseItemsControl.OnItemCollectionChanged(Object sender, NotifyCollectionChangedEventArgs e)
at System.Collections.Specialized.NotifyCollectionChangedEventHandler.Invoke(Object sender, NotifyCollectionChangedEventArgs e)
at Telerik.Windows.Data.DataItemCollection.OnCollectionChanged(NotifyCollectionChangedEventArgs e)
at Telerik.Windows.Data.DataItemCollection.OnCollectionViewCollectionChanged(NotifyCollectionChangedEventArgs e)
at Telerik.Windows.Data.DataItemCollection.Telerik.Windows.Data.IWeakEventListener<System.Collections.Specialized.NotifyCollectionChangedEventArgs>.ReceiveWeakEvent(Object sender, NotifyCollectionChangedEventArgs e)
at Telerik.Windows.Data.WeakEvent.WeakListener`1.Handler(Object sender, TArgs args)
at Telerik.Windows.Data.QueryableCollectionView.OnCollectionChanged(NotifyCollectionChangedEventArgs args)
at Telerik.Windows.Data.QueryableCollectionView.RefreshOverride()
at Telerik.Windows.Data.QueryableCollectionView.RefreshInternal()
at Telerik.Windows.Data.QueryableCollectionView.RefreshOrDefer()
at Telerik.Windows.Data.QueryableCollectionView.InvalidatePagingAndRefresh()
at Telerik.Windows.Data.QueryableCollectionView.OnGroupDescriptorsCollectionChanged(Object sender, NotifyCollectionChangedEventArgs e)
at System.Collections.Specialized.NotifyCollectionChangedEventHandler.Invoke(Object sender, NotifyCollectionChangedEventArgs e)
at System.Collections.ObjectModel.ObservableCollection`1.OnCollectionChanged(NotifyCollectionChangedEventArgs e)
at Telerik.Windows.Data.RadObservableCollection`1.OnCollectionChanged(NotifyCollectionChangedEventArgs e)
at Telerik.Windows.Data.ObservableItemCollection`1.OnCollectionChanged(NotifyCollectionChangedEventArgs e)
at System.Collections.ObjectModel.ObservableCollection`1.InsertItem(Int32 index, T item)
at Telerik.Windows.Data.RadObservableCollection`1.InsertItem(Int32 index, T item)
at System.Collections.ObjectModel.Collection`1.Insert(Int32 index, T item)
at System.Collections.ObjectModel.Collection`1.System.Collections.IList.Insert(Int32 index, Object value)
at Telerik.Windows.Data.CollectionHelper.Insert(IList target, IEnumerable newItems, Int32 startingIndex, IEqualityComparer itemComparer)
at Telerik.Windows.Data.ObservableCollectionManager.HandleCollectionChanged(IList sender, NotifyCollectionChangedEventArgs args)
at Telerik.Windows.Data.ObservableCollectionManager.Telerik.Windows.Data.IWeakEventListener<System.Collections.Specialized.NotifyCollectionChangedEventArgs>.ReceiveWeakEvent(Object sender, NotifyCollectionChangedEventArgs args)
at Telerik.Windows.Data.WeakEvent.WeakListener`1.Handler(Object sender, TArgs args)
at System.Collections.Specialized.NotifyCollectionChangedEventHandler.Invoke(Object sender, NotifyCollectionChangedEventArgs e)
at System.Collections.ObjectModel.ObservableCollection`1.OnCollectionChanged(NotifyCollectionChangedEventArgs e)
at Telerik.Windows.Data.RadObservableCollection`1.OnCollectionChanged(NotifyCollectionChangedEventArgs e)
at Telerik.Windows.Data.ObservableItemCollection`1.OnCollectionChanged(NotifyCollectionChangedEventArgs e)
at System.Collections.ObjectModel.ObservableCollection`1.InsertItem(Int32 index, T item)
at Telerik.Windows.Data.RadObservableCollection`1.InsertItem(Int32 index, T item)
at System.Collections.ObjectModel.Collection`1.Add(T item)
at Predica.Diviner.Silverlight.Common.CRMCommon.Components.RelatedItems.CreateCasesColumns()
at Predica.Diviner.Silverlight.Common.CRMCommon.Components.RelatedItems.ucItemsTabControl_SelectionChanged(Object sender, RoutedEventArgs e)
at Telerik.Windows.Controls.RadSelectionChangedEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
at Telerik.Windows.RadRoutedEventArgs.InvokeHandler(Delegate handler, Object target)
at Telerik.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RadRoutedEventArgs routedEventArgs)
at Telerik.Windows.RouteItem.InvokeHandler(RadRoutedEventArgs routedEventArgs)
at Telerik.Windows.EventRoute.InvokeHandlersImpl(Object source, RadRoutedEventArgs args, Boolean raisedAgain)
at Telerik.Windows.EventRoute.InvokeHandlers(Object source, RadRoutedEventArgs args)
at Telerik.Windows.RadRoutedEventHelper.RaiseEvent(DependencyObject element, RadRoutedEventArgs args)
at Telerik.Windows.DependencyObjectExtensions.RaiseEvent(DependencyObject element, RadRoutedEventArgs e)
at Telerik.Windows.Controls.TabControl.RadTabControlBase.OnSelectionChanged(RadSelectionChangedEventArgs e)
at Telerik.Windows.Controls.TabControl.RadTabControlBase.HandleSelectionChanged(IList removedItems, IList addedItems)
at Telerik.Windows.Controls.TabControl.RadTabControlBase.Selector_SelectionChanged(Object sender, SelectionChangedEventArgs e)}
[System.NullReferenceException]: {System.NullReferenceException: Object reference not set to an instance of an object.
at Telerik.Windows.Data.TypeExtensions.DefaultValue(Type type)
at Telerik.Windows.Data.Expressions.ExpressionFactory.DefaltValueExpression(Type type)
at Telerik.Windows.Data.Expressions.ExpressionFactory.MakeMemberAccess(Expression instance, String memberName, Type memberType)
at Telerik.Windows.Data.Expressions.ExpressionFactory.MakeMemberAccess(Expression instance, String memberName, Type memberType, Boolean liftMemberAccessToNull)
at Telerik.Windows.Data.Expressions.PropertyAccessExpressionBuilder.CreateMemberAccessExpressionOverride()
at Telerik.Windows.Data.Expressions.MemberAccessExpressionBuilderBase.CreateMemberAccessExpression()
at Telerik.Windows.Data.GroupDescriptor.CreateGroupKeyExpression(ParameterExpression parameterExpression)
at Telerik.Windows.Data.GroupDescriptorBase.CreateGroupKeyExpression(Expression itemExpression)
at Telerik.Windows.Data.IGroupDescriptorExtensions.GetGroupKeyType(IGroupDescriptor groupDescriptor, Type itemType)
at Telerik.Windows.Data.GroupInfo..ctor(IGroupDescriptor groupDescriptor, Type itemType)
at Telerik.Windows.Data.QueryableCollectionViewGroupRoot..ctor(IEnumerable`1 originalGroups, IEnumerable`1 groupDescriptors, IEnumerable`1 sortDescriptors, Type itemType)
at Telerik.Windows.Data.QueryableCollectionView.EnsureRootGroup()
at Telerik.Windows.Data.QueryableCollectionView.get_Groups()
at Telerik.Windows.Controls.GridView.GridViewItemContainerGenerator.PrepareGrouping()
at Telerik.Windows.Controls.GridView.GridViewItemContainerGenerator.ResetGeneratorAndReuseContainers()
at Telerik.Windows.Controls.GridView.GridViewItemContainerGenerator.ReInitializeContainers()
at Telerik.Windows.Controls.GridView.GridViewDataControl.ReuseContainersOnReset()
at Telerik.Windows.Controls.GridView.GridViewDataControl.OnItemsChanged(NotifyCollectionChangedEventArgs e)
at Telerik.Windows.Controls.GridView.BaseItemsControl.OnItemCollectionChanged(Object sender, NotifyCollectionChangedEventArgs e)
at System.Collections.Specialized.NotifyCollectionChangedEventHandler.Invoke(Object sender, NotifyCollectionChangedEventArgs e)
at Telerik.Windows.Data.DataItemCollection.OnCollectionChanged(NotifyCollectionChangedEventArgs e)
at Telerik.Windows.Data.DataItemCollection.OnCollectionViewCollectionChanged(NotifyCollectionChangedEventArgs e)
at Telerik.Windows.Data.DataItemCollection.Telerik.Windows.Data.IWeakEventListener<System.Collections.Specialized.NotifyCollectionChangedEventArgs>.ReceiveWeakEvent(Object sender, NotifyCollectionChangedEventArgs e)
at Telerik.Windows.Data.WeakEvent.WeakListener`1.Handler(Object sender, TArgs args)
at Telerik.Windows.Data.QueryableCollectionView.OnCollectionChanged(NotifyCollectionChangedEventArgs args)
at Telerik.Windows.Data.QueryableCollectionView.RefreshOverride()
at Telerik.Windows.Data.QueryableCollectionView.RefreshInternal()
at Telerik.Windows.Data.QueryableCollectionView.RefreshOrDefer()
at Telerik.Windows.Data.QueryableCollectionView.InvalidatePagingAndRefresh()
at Telerik.Windows.Data.QueryableCollectionView.OnGroupDescriptorsCollectionChanged(Object sender, NotifyCollectionChangedEventArgs e)
at System.Collections.Specialized.NotifyCollectionChangedEventHandler.Invoke(Object sender, NotifyCollectionChangedEventArgs e)
at System.Collections.ObjectModel.ObservableCollection`1.OnCollectionChanged(NotifyCollectionChangedEventArgs e)
at Telerik.Windows.Data.RadObservableCollection`1.OnCollectionChanged(NotifyCollectionChangedEventArgs e)
at Telerik.Windows.Data.ObservableItemCollection`1.OnCollectionChanged(NotifyCollectionChangedEventArgs e)
at System.Collections.ObjectModel.ObservableCollection`1.InsertItem(Int32 index, T item)
at Telerik.Windows.Data.RadObservableCollection`1.InsertItem(Int32 index, T item)
at System.Collections.ObjectModel.Collection`1.Insert(Int32 index, T item)
at System.Collections.ObjectModel.Collection`1.System.Collections.IList.Insert(Int32 index, Object value)
at Telerik.Windows.Data.CollectionHelper.Insert(IList target, IEnumerable newItems, Int32 startingIndex, IEqualityComparer itemComparer)
at Telerik.Windows.Data.ObservableCollectionManager.HandleCollectionChanged(IList sender, NotifyCollectionChangedEventArgs args)
at Telerik.Windows.Data.ObservableCollectionManager.Telerik.Windows.Data.IWeakEventListener<System.Collections.Specialized.NotifyCollectionChangedEventArgs>.ReceiveWeakEvent(Object sender, NotifyCollectionChangedEventArgs args)
at Telerik.Windows.Data.WeakEvent.WeakListener`1.Handler(Object sender, TArgs args)
at System.Collections.Specialized.NotifyCollectionChangedEventHandler.Invoke(Object sender, NotifyCollectionChangedEventArgs e)
at System.Collections.ObjectModel.ObservableCollection`1.OnCollectionChanged(NotifyCollectionChangedEventArgs e)
at Telerik.Windows.Data.RadObservableCollection`1.OnCollectionChanged(NotifyCollectionChangedEventArgs e)
at Telerik.Windows.Data.ObservableItemCollection`1.OnCollectionChanged(NotifyCollectionChangedEventArgs e)
at System.Collections.ObjectModel.ObservableCollection`1.InsertItem(Int32 index, T item)
at Telerik.Windows.Data.RadObservableCollection`1.InsertItem(Int32 index, T item)
at System.Collections.ObjectModel.Collection`1.Add(T item)
at Predica.Diviner.Silverlight.Common.CRMCommon.Components.RelatedItems.CreateCasesColumns()
at Predica.Diviner.Silverlight.Common.CRMCommon.Components.RelatedItems.ucItemsTabControl_SelectionChanged(Object sender, RoutedEventArgs e)
at Telerik.Windows.Controls.RadSelectionChangedEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
at Telerik.Windows.RadRoutedEventArgs.InvokeHandler(Delegate handler, Object target)
at Telerik.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RadRoutedEventArgs routedEventArgs)
at Telerik.Windows.RouteItem.InvokeHandler(RadRoutedEventArgs routedEventArgs)
at Telerik.Windows.EventRoute.InvokeHandlersImpl(Object source, RadRoutedEventArgs args, Boolean raisedAgain)
at Telerik.Windows.EventRoute.InvokeHandlers(Object source, RadRoutedEventArgs args)
at Telerik.Windows.RadRoutedEventHelper.RaiseEvent(DependencyObject element, RadRoutedEventArgs args)
at Telerik.Windows.DependencyObjectExtensions.RaiseEvent(DependencyObject element, RadRoutedEventArgs e)
at Telerik.Windows.Controls.TabControl.RadTabControlBase.OnSelectionChanged(RadSelectionChangedEventArgs e)
at Telerik.Windows.Controls.TabControl.RadTabControlBase.HandleSelectionChanged(IList removedItems, IList addedItems)
at Telerik.Windows.Controls.TabControl.RadTabControlBase.Selector_SelectionChanged(Object sender, SelectionChangedEventArgs e)}
Data: {System.Collections.ListDictionaryInternal}
InnerException: null
Message: "Object reference not set to an instance of an object."
StackTrace: " at Telerik.Windows.Data.TypeExtensions.DefaultValue(Type type)\r\n at Telerik.Windows.Data.Expressions.ExpressionFactory.DefaltValueExpression(Type type)\r\n at Telerik.Windows.Data.Expressions.ExpressionFactory.MakeMemberAccess(Expression instance, String memberName, Type memberType)\r\n at Telerik.Windows.Data.Expressions.ExpressionFactory.MakeMemberAccess(Expression instance, String memberName, Type memberType, Boolean liftMemberAccessToNull)\r\n at Telerik.Windows.Data.Expressions.PropertyAccessExpressionBuilder.CreateMemberAccessExpressionOverride()\r\n at Telerik.Windows.Data.Expressions.MemberAccessExpressionBuilderBase.CreateMemberAccessExpression()\r\n at Telerik.Windows.Data.GroupDescriptor.CreateGroupKeyExpression(ParameterExpression parameterExpression)\r\n at Telerik.Windows.Data.GroupDescriptorBase.CreateGroupKeyExpression(Expression itemExpression)\r\n at Telerik.Windows.Data.IGroupDescriptorExtensions.GetGroupKeyType(IGroupDescriptor groupDescriptor, Type ite
mType)\r\n at Telerik.Windows.Data.GroupInfo..ctor(IGroupDescriptor groupDescriptor, Type itemType)\r\n at Telerik.Windows.Data.QueryableCollectionViewGroupRoot..ctor(IEnumerable`1 originalGroups, IEnumerable`1 groupDescriptors, IEnumerable`1 sortDescriptors, Type itemType)\r\n at Telerik.Windows.Data.QueryableCollectionView.EnsureRootGroup()\r\n at Telerik.Windows.Data.QueryableCollectionView.get_Groups()\r\n at Telerik.Windows.Controls.GridView.GridViewItemContainerGenerator.PrepareGrouping()\r\n at Telerik.Windows.Controls.GridView.GridViewItemContainerGenerator.ResetGeneratorAndReuseContainers()\r\n at Telerik.Windows.Controls.GridView.GridViewItemContainerGenerator.ReInitializeContainers()\r\n at Telerik.Windows.Controls.GridView.GridViewDataControl.ReuseContainersOnReset()\r\n at Telerik.Windows.Controls.GridView.GridViewDataControl.OnItemsChanged(NotifyCollectionChangedEventArgs e)\r\n at Telerik.Windows.Controls.GridView.BaseItemsControl.OnItemCollectionChanged(Object sender, Notify
CollectionChangedEventArgs e)\r\n at System.Collections.Specialized.NotifyCollectionChangedEventHandler.Invoke(Object sender, NotifyCollectionChangedEventArgs e)\r\n at Telerik.Windows.Data.DataItemCollection.OnCollectionChanged(NotifyCollectionChangedEventArgs e)\r\n at Telerik.Windows.Data.DataItemCollection.OnCollectionViewCollectionChanged(NotifyCollectionChangedEventArgs e)\r\n at Telerik.Windows.Data.DataItemCollection.Telerik.Windows.Data.IWeakEventListener<System.Collections.Specialized.NotifyCollectionChangedEventArgs>.ReceiveWeakEvent(Object sender, NotifyCollectionChangedEventArgs e)\r\n at Telerik.Windows.Data.WeakEvent.WeakListener`1.Handler(Object sender, TArgs args)\r\n at Telerik.Windows.Data.QueryableCollectionView.OnCollectionChanged(NotifyCollectionChangedEventArgs args)\r\n at Telerik.Windows.Data.QueryableCollectionView.RefreshOverride()\r\n at Telerik.Windows.Data.QueryableCollectionView.RefreshInternal()\r\n at Telerik.Windows.Data.QueryableCollectionView.RefreshOrDefer
()\r\n at Telerik.Windows.Data.QueryableCollectionView.InvalidatePagingAndRefresh()\r\n at Telerik.Windows.Data.QueryableCollectionView.OnGroupDescriptorsCollectionChanged(Object sender, NotifyCollectionChangedEventArgs e)\r\n at System.Collections.Specialized.NotifyCollectionChangedEventHandler.Invoke(Object sender, NotifyCollectionChangedEventArgs e)\r\n at System.Collections.ObjectModel.ObservableCollection`1.OnCollectionChanged(NotifyCollectionChangedEventArgs e)\r\n at Telerik.Windows.Data.RadObservableCollection`1.OnCollectionChanged(NotifyCollectionChangedEventArgs e)\r\n at Telerik.Windows.Data.ObservableItemCollection`1.OnCollectionChanged(NotifyCollectionChangedEventArgs e)\r\n at System.Collections.ObjectModel.ObservableCollection`1.InsertItem(Int32 index, T item)\r\n at Telerik.Windows.Data.RadObservableCollection`1.InsertItem(Int32 index, T item)\r\n at System.Collections.ObjectModel.Collection`1.Insert(Int32 index, T item)\r\n at System.Collections.ObjectModel.Collection`1.Sys
tem.Collections.IList.Insert(Int32 index, Object value)\r\n at Telerik.Windows.Data.CollectionHelper.Insert(IList target, IEnumerable newItems, Int32 startingIndex, IEqualityComparer itemComparer)\r\n at Telerik.Windows.Data.ObservableCollectionManager.HandleCollectionChanged(IList sender, NotifyCollectionChangedEventArgs args)\r\n at Telerik.Windows.Data.ObservableCollectionManager.Telerik.Windows.Data.IWeakEventListener<System.Collections.Specialized.NotifyCollectionChangedEventArgs>.ReceiveWeakEvent(Object sender, NotifyCollectionChangedEventArgs args)\r\n at Telerik.Windows.Data.WeakEvent.WeakListener`1.Handler(Object sender, TArgs args)\r\n at System.Collections.Specialized.NotifyCollectionChangedEventHandler.Invoke(Object sender, NotifyCollectionChangedEventArgs e)\r\n at System.Collections.ObjectModel.ObservableCollection`1.OnCollectionChanged(NotifyCollectionChangedEventArgs e)\r\n at Telerik.Windows.Data.RadObservableCollection`1.OnCollectionChanged(NotifyCollectionChangedEventArgs e)\r\
n at Telerik.Windows.Data.ObservableItemCollection`1.OnCollectionChanged(NotifyCollectionChangedEventArgs e)\r\n at System.Collections.ObjectModel.ObservableCollection`1.InsertItem(Int32 index, T item)\r\n at Telerik.Windows.Data.RadObservableCollection`1.InsertItem(Int32 index, T item)\r\n at System.Collections.ObjectModel.Collection`1.Add(T item)\r\n at Predica.Diviner.Silverlight.Common.CRMCommon.Components.RelatedItems.CreateCasesColumns()\r\n at Predica.Diviner.Silverlight.Common.CRMCommon.Components.RelatedItems.ucItemsTabControl_SelectionChanged(Object sender, RoutedEventArgs e)\r\n at Telerik.Windows.Controls.RadSelectionChangedEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)\r\n at Telerik.Windows.RadRoutedEventArgs.InvokeHandler(Delegate handler, Object target)\r\n at Telerik.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RadRoutedEventArgs routedEventArgs)\r\n at Telerik.Windows.RouteItem.InvokeHandler(RadRoutedEventArgs routedEventArgs)\r\
n at Telerik.Windows.EventRoute.InvokeHandlersImpl(Object source, RadRoutedEventArgs args, Boolean raisedAgain)\r\n at Telerik.Windows.EventRoute.InvokeHandlers(Object source, RadRoutedEventArgs args)\r\n at Telerik.Windows.RadRoutedEventHelper.RaiseEvent(DependencyObject element, RadRoutedEventArgs args)\r\n at Telerik.Windows.DependencyObjectExtensions.RaiseEvent(DependencyObject element, RadRoutedEventArgs e)\r\n at Telerik.Windows.Controls.TabControl.RadTabControlBase.OnSelectionChanged(RadSelectionChangedEventArgs e)\r\n at Telerik.Windows.Controls.TabControl.RadTabControlBase.HandleSelectionChanged(IList removedItems, IList addedItems)\r\n at Telerik.Windows.Controls.TabControl.RadTabControlBase.Selector_SelectionChanged(Object sender, SelectionChangedEventArgs e)"

4 Answers, 1 is accepted

Sort by
0
Konrad Sikorski
Top achievements
Rank 1
answered on 14 Sep 2011, 12:38 PM
Here you have another example. This one is more similar to our case.
public partial class MainPage : UserControl
    {
        private List<Item1> items1;
        private List<Item2> items2;
  
        public MainPage()
        {
            InitializeComponent();
  
            new Thread( GetData ).Start();
  
            ucItemsGrid.IsBusy = true;
        }
  
        private void Callback()
        {
            ucItemsGrid.IsBusy = false;
        }
  
        private void GetData()
        {
            Thread.Sleep(5000);
  
            items1 = new List<Item1>
                         {
                             new Item1{Name = "A1", Group = "G1"}
                             ,new Item1{Name = "A2", Group = "G1"}
                             ,new Item1{Name = "A3", Group = "G2"}
                             ,new Item1{Name = "A4", Group = "G2"}
                         };
  
            items2 = new List<Item2>
                         {
                             new Item2{Title = "B1"}
                             ,new Item2{Title = "B2"}
                             ,new Item2{Title = "B3"}
                         };
  
            Deployment.Current.Dispatcher.BeginInvoke( Callback );
        }
  
        private void ucItemsTabControl_SelectionChanged( object sender, RadSelectionChangedEventArgs e )
        {
            ucItemsGrid.SortDescriptors.Clear();
            ucItemsGrid.Columns.Clear();
            ucItemsGrid.GroupDescriptors.Clear();
            //ucItemsGrid.ItemsSource = new List<object>();
  
            if( ucTab1 == ucItemsTabControl.SelectedItem )
            {
                CreateTab1Columns();
                ucItemsGrid.ItemsSource = items1;
                ucItemsGrid.CurrentItem = null;
            }
            else if( ucTab2 == ucItemsTabControl.SelectedItem )
            {
                CreateTab2Columns();
                ucItemsGrid.ItemsSource = items2;
                ucItemsGrid.CurrentItem = null;
            }
        }
  
        private void CreateTab1Columns()
        {
            ucItemsGrid.Columns.Add( new GridViewDataColumn { UniqueName = "Name", Header = "Name" } );
            ucItemsGrid.GroupDescriptors.Add( new GroupDescriptor { Member = "Status" } );
        }
  
        private void CreateTab2Columns()
        {
            ucItemsGrid.Columns.Add( new GridViewDataColumn { UniqueName = "Title", Header = "Title" } );
        }
    }
  
    public class Item1
    {
        public string Name { get; set; }
        public string Group { get; set; }
    }
  
    public class Item2
    {
        public string Title { get; set; }
    }
<UserControl x:Class="tmpRadGridGroupingBug2.MainPage"
    mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400">
  
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition />
        </Grid.RowDefinitions>
        <telerik:RadTabControl Grid.Row="0" Name="ucItemsTabControl" SelectionChanged="ucItemsTabControl_SelectionChanged" >
            <telerik:RadTabItem Header="Tab1" Name="ucTab1" />
            <telerik:RadTabItem Header="Tab2" Name="ucTab2" />
        </telerik:RadTabControl>
        <telerik:RadGridView Grid.Row="1" Name="ucItemsGrid" 
                                AutoGenerateColumns="False" 
                                />
    </Grid>
</UserControl>

Any suggestions what is wrong?
0
Konrad Sikorski
Top achievements
Rank 1
answered on 15 Sep 2011, 02:58 PM
Anyone is there? Can you reproduce this issue?
0
Nedyalko Nikolov
Telerik team
answered on 19 Sep 2011, 08:22 AM
Hi Konrad Sikorski,

The problem comes from the fact that group descriptor depends on an actual element type (type of the business object). In your case when TAB2 is selected ElementType of RadGridView is "Item2", then when TAB selection is returned to TAB1 ElementType should be "Item1". Keeping this in mind RadGridView you cannot add group descriptor for "Item1" when actual element type is "Item2". Hopefully there is a very simple fix just create tab columns after setting the new ItemsSource.

if( ucTab1 == ucItemsTabControl.SelectedItem )
            {
                ucItemsGrid.ItemsSource = items1;
                CreateTab1Columns();
                ucItemsGrid.CurrentItem = null;
            }
            else if( ucTab2 == ucItemsTabControl.SelectedItem )
            {
                ucItemsGrid.ItemsSource = items2;
                CreateTab2Columns();
                ucItemsGrid.CurrentItem = null;
            }

Let me know if this doesn't help.

Best wishes,
Nedyalko Nikolov
the Telerik team

Explore the entire Telerik portfolio by downloading the Ultimate Collection trial package. Get it now >>

0
Konrad Sikorski
Top achievements
Rank 1
answered on 22 Sep 2011, 11:13 AM
Hello,

Thank you for your help. Yes this change will help. But I still cannot understand why this exception has to occur. In my opinion it is a bug becouse of:
1. When you create a new grid than you can set the Descriptor value without an exception.
2. I have to change my code to work with your new version even if the logic was not change in your version (and I cannot find note about breaking changes)

Change only one method in my last example and tell me why it works when tab "Items1" is show first time and why it is not working when you swithc to "Items 2" and go back to "items1":
private void ucItemsTabControl_SelectionChanged( object sender, RadSelectionChangedEventArgs e )
{
    ucItemsGrid.SortDescriptors.Clear();
    ucItemsGrid.Columns.Clear();
    ucItemsGrid.GroupDescriptors.Clear();
    ucItemsGrid.ItemsSource = null;
  
    if( ucTab1 == ucItemsTabControl.SelectedItem )
    {
        CreateTab1Columns();
        //ucItemsGrid.ItemsSource = items1;
        ucItemsGrid.CurrentItem = null;
    }
    else if( ucTab2 == ucItemsTabControl.SelectedItem )
    {
        CreateTab2Columns();
        ucItemsGrid.ItemsSource = items2;
        ucItemsGrid.CurrentItem = null;
    }
}

Thanks.
Tags
GridView
Asked by
Konrad Sikorski
Top achievements
Rank 1
Answers by
Konrad Sikorski
Top achievements
Rank 1
Nedyalko Nikolov
Telerik team
Share this question
or