This question is locked. New answers and comments are not allowed.
Hi,
I'm currenty trying to extend the sample from http://demos.telerik.com/silverlight/#PersistenceFramework/GridViewCustomSerialization to my needs. Specifically I need to store the visibility information of each column.
To accomplish that I extended the ColumnProxy to look like this:
Storing the values works fine, but as soon as I try to restore them using this code
an InvalidOperationException is thrown when trying to assign the DisplayIndex.
The exact StackTrace is:
{System.InvalidOperationException: Cannot change or check the contents or Current position of the QueryableCollectionView while Refresh is being deferred.
at Telerik.Windows.Data.QueryableCollectionView.VerifyRefreshNotDeferred()
at Telerik.Windows.Data.QueryableCollectionView.get_Count()
at Telerik.Windows.Data.DataItemCollection.get_Count()
at Telerik.Windows.Controls.GridView.Selection.CellInfoCollection.RemoveRegionForColumn(Int32 columnIndex)
at Telerik.Windows.Controls.GridView.Selection.CellInfoCollection.OnColumnMoved(Int32 oldColumnIndex, Int32 newColumnIndex)
at Telerik.Windows.Controls.GridView.Selection.CellSelectionHandler.HandleColumnsChanged(ColumnCollectionChangedAction action, Int32 oldDisplayIndex, GridViewColumn oldColumn, Int32 newDisplayIndex)
at Telerik.Windows.Controls.GridView.Selection.CompositeSelectionHandler.HandleColumnsChanged(ColumnCollectionChangedAction action, Int32 oldDisplayIndex, GridViewColumn oldColumn, Int32 newDisplayIndex)
at Telerik.Windows.Controls.GridView.GridViewDataControl.UpdateSelectionOnColumnsChanged(ColumnCollectionChangedAction action, Int32 oldDisplayIndex, GridViewColumn oldColumn, Int32 newDisplayIndex)
at Telerik.Windows.Controls.GridViewColumnCollectionInternal.SetDisplayIndexForColumn(Int32 oldDisplayIndex, Int32 newDisplayIndex)
at Telerik.Windows.Controls.GridViewColumnCollectionInternal.OnDisplayIndexChanged(GridViewColumn column, Int32 oldDisplayIndex, Int32 newDisplayIndex)
at Telerik.Windows.Controls.GridViewColumnCollectionInternal.NotifyPropertyChanged(DependencyObject d, String propertyName, DependencyPropertyChangedEventArgs e, UpdateTarget target)
at Telerik.Windows.Controls.GridView.GridViewDataControl.NotifyPropertyChanged(DependencyObject d, String propertyName, DependencyPropertyChangedEventArgs e, UpdateTarget target)
at Telerik.Windows.Controls.GridView.GridViewDataControl.NotifyPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e, UpdateTarget target)
at Telerik.Windows.Controls.GridViewColumn.NotifyPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e, UpdateTarget target)
at Telerik.Windows.Controls.GridViewColumn.DisplayIndexChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
at Telerik.Windows.PropertyMetadata.<>c__DisplayClass1.<Create>b__0(DependencyObject d, DependencyPropertyChangedEventArgs e)
at System.Windows.DependencyObject.RaisePropertyChangeNotifications(DependencyProperty dp, Object oldValue, Object newValue)
at System.Windows.DependencyObject.UpdateEffectiveValue(DependencyProperty property, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, ValueOperation operation)
at System.Windows.DependencyObject.SetValueInternal(DependencyProperty dp, Object value, Boolean allowReadOnlySet, Boolean isBindingInStyleSetter)
at System.Windows.DependencyObject.SetValue(DependencyProperty dp, Object value)
at Telerik.Windows.Controls.GridViewColumn.set_DisplayIndex(Int32 value)
at SilverlightApplication1.Persistence.GridViewCustomPropertyProvider.RestoreValue(CustomPropertyInfo customPropertyInfo, Object context, Object value)
at Telerik.Windows.Persistence.Serialization.Deserializer.LoadProperties(ReferenceValue refValue, String path, Object obj)
at Telerik.Windows.Persistence.Serialization.Deserializer.Deserialize(ReferenceValue refValue, Object obj)
at Telerik.Windows.Persistence.Serialization.Deserializer.Deserialize(Stream stream, Object objectToDeserialize)
at Telerik.Windows.Persistence.PersistenceManager.Load(Object obj, Stream stream)
at SilverlightApplication1.GridViewHeaderMenu.onMenuItemClick(Object sender, RoutedEventArgs e)
at Telerik.Windows.Controls.MenuBase.OnItemClick(RadRoutedEventArgs args)
at Telerik.Windows.Controls.MenuBase.OnItemClick(Object sender, RadRoutedEventArgs args)
at Telerik.Windows.RadRoutedEventArgs.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.RadMenuItem.OnClickImpl()
at Telerik.Windows.Controls.RadMenuItem.OnClick()
at Telerik.Windows.Controls.RadMenuItem.ClickItem()
at Telerik.Windows.Controls.RadMenuItem.HandleMouseUp()
at Telerik.Windows.Controls.RadMenuItem.OnMouseLeftButtonUp(MouseButtonEventArgs e)
at System.Windows.Controls.Control.OnMouseLeftButtonUp(Control ctrl, EventArgs e)
at MS.Internal.JoltHelper.FireEvent(IntPtr unmanagedObj, IntPtr unmanagedObjArgs, Int32 argsTypeIndex, Int32 actualArgsTypeIndex, String eventName, UInt32 flags)}
Any hints?
Thanks,
Philipp
I'm currenty trying to extend the sample from http://demos.telerik.com/silverlight/#PersistenceFramework/GridViewCustomSerialization to my needs. Specifically I need to store the visibility information of each column.
To accomplish that I extended the ColumnProxy to look like this:
public class ColumnProxy { public string UniqueName { get; set; } public int DisplayOrder { get; set; } public string Header { get; set; } public GridViewLength Width { get; set; } public bool IsVisible { get; set; } }Storing the values works fine, but as soon as I try to restore them using this code
public void RestoreValue(CustomPropertyInfo customPropertyInfo, object context, object value){ var gridView = context as RadGridView; if (gridView == null) throw new ArgumentException("context is not a RadGridView"); switch (customPropertyInfo.Name) { case "Columns": { var savedProxies = value as List<ColumnProxy>; // restore properties on the saved columns: foreach (var proxy in savedProxies) { var column = getColumnInstance(gridView, proxy.UniqueName); if (column == null) continue; column.DisplayIndex = proxy.DisplayOrder; column.Header = proxy.Header; column.Width = proxy.Width; column.IsVisible = proxy.IsVisible; } } break; ...}an InvalidOperationException is thrown when trying to assign the DisplayIndex.
The exact StackTrace is:
{System.InvalidOperationException: Cannot change or check the contents or Current position of the QueryableCollectionView while Refresh is being deferred.
at Telerik.Windows.Data.QueryableCollectionView.VerifyRefreshNotDeferred()
at Telerik.Windows.Data.QueryableCollectionView.get_Count()
at Telerik.Windows.Data.DataItemCollection.get_Count()
at Telerik.Windows.Controls.GridView.Selection.CellInfoCollection.RemoveRegionForColumn(Int32 columnIndex)
at Telerik.Windows.Controls.GridView.Selection.CellInfoCollection.OnColumnMoved(Int32 oldColumnIndex, Int32 newColumnIndex)
at Telerik.Windows.Controls.GridView.Selection.CellSelectionHandler.HandleColumnsChanged(ColumnCollectionChangedAction action, Int32 oldDisplayIndex, GridViewColumn oldColumn, Int32 newDisplayIndex)
at Telerik.Windows.Controls.GridView.Selection.CompositeSelectionHandler.HandleColumnsChanged(ColumnCollectionChangedAction action, Int32 oldDisplayIndex, GridViewColumn oldColumn, Int32 newDisplayIndex)
at Telerik.Windows.Controls.GridView.GridViewDataControl.UpdateSelectionOnColumnsChanged(ColumnCollectionChangedAction action, Int32 oldDisplayIndex, GridViewColumn oldColumn, Int32 newDisplayIndex)
at Telerik.Windows.Controls.GridViewColumnCollectionInternal.SetDisplayIndexForColumn(Int32 oldDisplayIndex, Int32 newDisplayIndex)
at Telerik.Windows.Controls.GridViewColumnCollectionInternal.OnDisplayIndexChanged(GridViewColumn column, Int32 oldDisplayIndex, Int32 newDisplayIndex)
at Telerik.Windows.Controls.GridViewColumnCollectionInternal.NotifyPropertyChanged(DependencyObject d, String propertyName, DependencyPropertyChangedEventArgs e, UpdateTarget target)
at Telerik.Windows.Controls.GridView.GridViewDataControl.NotifyPropertyChanged(DependencyObject d, String propertyName, DependencyPropertyChangedEventArgs e, UpdateTarget target)
at Telerik.Windows.Controls.GridView.GridViewDataControl.NotifyPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e, UpdateTarget target)
at Telerik.Windows.Controls.GridViewColumn.NotifyPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e, UpdateTarget target)
at Telerik.Windows.Controls.GridViewColumn.DisplayIndexChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
at Telerik.Windows.PropertyMetadata.<>c__DisplayClass1.<Create>b__0(DependencyObject d, DependencyPropertyChangedEventArgs e)
at System.Windows.DependencyObject.RaisePropertyChangeNotifications(DependencyProperty dp, Object oldValue, Object newValue)
at System.Windows.DependencyObject.UpdateEffectiveValue(DependencyProperty property, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, ValueOperation operation)
at System.Windows.DependencyObject.SetValueInternal(DependencyProperty dp, Object value, Boolean allowReadOnlySet, Boolean isBindingInStyleSetter)
at System.Windows.DependencyObject.SetValue(DependencyProperty dp, Object value)
at Telerik.Windows.Controls.GridViewColumn.set_DisplayIndex(Int32 value)
at SilverlightApplication1.Persistence.GridViewCustomPropertyProvider.RestoreValue(CustomPropertyInfo customPropertyInfo, Object context, Object value)
at Telerik.Windows.Persistence.Serialization.Deserializer.LoadProperties(ReferenceValue refValue, String path, Object obj)
at Telerik.Windows.Persistence.Serialization.Deserializer.Deserialize(ReferenceValue refValue, Object obj)
at Telerik.Windows.Persistence.Serialization.Deserializer.Deserialize(Stream stream, Object objectToDeserialize)
at Telerik.Windows.Persistence.PersistenceManager.Load(Object obj, Stream stream)
at SilverlightApplication1.GridViewHeaderMenu.onMenuItemClick(Object sender, RoutedEventArgs e)
at Telerik.Windows.Controls.MenuBase.OnItemClick(RadRoutedEventArgs args)
at Telerik.Windows.Controls.MenuBase.OnItemClick(Object sender, RadRoutedEventArgs args)
at Telerik.Windows.RadRoutedEventArgs.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.RadMenuItem.OnClickImpl()
at Telerik.Windows.Controls.RadMenuItem.OnClick()
at Telerik.Windows.Controls.RadMenuItem.ClickItem()
at Telerik.Windows.Controls.RadMenuItem.HandleMouseUp()
at Telerik.Windows.Controls.RadMenuItem.OnMouseLeftButtonUp(MouseButtonEventArgs e)
at System.Windows.Controls.Control.OnMouseLeftButtonUp(Control ctrl, EventArgs e)
at MS.Internal.JoltHelper.FireEvent(IntPtr unmanagedObj, IntPtr unmanagedObjArgs, Int32 argsTypeIndex, Int32 actualArgsTypeIndex, String eventName, UInt32 flags)}
Any hints?
Thanks,
Philipp