This question is locked. New answers and comments are not allowed.
Hi,
I have a GridView bound to a DomainDataSource. In my DomainDataSource, I have a default filter on one of the fields. I want this default filter to show up in the column filter. I try to do this by adding a ColumnFilterDescriptor to my grid after the LoadedData event of the DomainDataSource. However I am getting the following error whenever I add something to the FilterDescriptors collection:
{System.InvalidOperationException: Collection was modified; enumeration operation may not execute.
at System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource)
at System.Collections.Generic.List`1.Enumerator.MoveNextRare()
at System.Collections.Generic.List`1.Enumerator.MoveNext()
at Telerik.Windows.Controls.Data.DataFilter.CompositeFilterViewModel.FilterViewModelCollection.Add(IEnumerable`1 filterDescriptors)
at Telerik.Windows.Controls.Data.DataFilter.CompositeFilterViewModel.FilterViewModelCollection..ctor(CompositeFilterViewModel parent)
at Telerik.Windows.Controls.Data.DataFilter.CompositeFilterViewModel..ctor(ICompositeFilterDescriptor descriptor, IEnumerable`1 itemProperties, Boolean canUserCreateCompositeFilters, Action`1 filterOperatorsLoadingCallback)
at Telerik.Windows.Controls.Data.DataFilter.FilterViewModel.PrepareCompositeFilter(IFilterDescriptor filterDescriptor)
at Telerik.Windows.Controls.Data.DataFilter.FilterViewModel.Prepare(IFilterDescriptor filterDescriptor)
at Telerik.Windows.Controls.Data.DataFilter.FilterViewModel..ctor(IFilterDescriptor filterDescriptor, IEnumerable`1 itemPropertyDefinitions, Boolean canUserCreateCompositeFilters, Action`1 filterOperatorsLoadingCallback)
at Telerik.Windows.Controls.Data.DataFilter.CompositeFilterViewModel.FilterViewModelCollection.Add(IEnumerable`1 filterDescriptors)
at Telerik.Windows.Controls.Data.DataFilter.CompositeFilterViewModel.FilterViewModelCollection..ctor(CompositeFilterViewModel parent)
at Telerik.Windows.Controls.Data.DataFilter.CompositeFilterViewModel..ctor(ICompositeFilterDescriptor descriptor, IEnumerable`1 itemProperties, Boolean canUserCreateCompositeFilters, Action`1 filterOperatorsLoadingCallback)
at Telerik.Windows.Controls.Data.DataFilter.FilterViewModel.PrepareCompositeFilter(IFilterDescriptor filterDescriptor)
at Telerik.Windows.Controls.Data.DataFilter.RootFilterViewModel.Prepare(IFilterDescriptor filterDescriptor)
at Telerik.Windows.Controls.Data.DataFilter.FilterViewModel..ctor(IFilterDescriptor filterDescriptor, IEnumerable`1 itemPropertyDefinitions, Boolean canUserCreateCompositeFilters, Action`1 filterOperatorsLoadingCallback)
at Telerik.Windows.Controls.Data.DataFilter.RootFilterViewModel..ctor(ICompositeFilterDescriptor compositeFilterDescriptor, IEnumerable`1 itemPropertyDefinitions, Boolean canUserCreateCompositeFilters, Action`1 filterOperatorsLoadingCallback)
at Telerik.Windows.Controls.RadDataFilter.RefreshViewModel()
at Telerik.Windows.Controls.RadDataFilter.OnQueryableSourcePropertyChanged(Object sender, PropertyChangedEventArgs e)
at System.ComponentModel.PropertyChangedEventHandler.Invoke(Object sender, PropertyChangedEventArgs e)
at Telerik.Windows.Data.DataItemCollection.OnPropertyChanged(PropertyChangedEventArgs e)
at Telerik.Windows.Data.DataItemCollection.Telerik.Windows.Data.IWeakEventListener<System.ComponentModel.PropertyChangedEventArgs>.ReceiveWeakEvent(Object sender, PropertyChangedEventArgs args)
at Telerik.Windows.Data.WeakEvent.WeakListener`1.Handler(Object sender, TArgs args)
at Telerik.Windows.Data.QueryableCollectionView.OnPropertyChanged(PropertyChangedEventArgs e)
at Telerik.Windows.Data.QueryableCollectionView.OnPropertyChanged(String propertyName)
at Telerik.Windows.Data.QueryableCollectionView.InvalidateItemProperties()
at Telerik.Windows.Data.QueryableCollectionView.OnElementTypeChanged()
at Telerik.Windows.Data.QueryableCollectionView.set_ElementType(Type value)
at Telerik.Windows.Data.QueryableCollectionView.InitializeElementType()
at Telerik.Windows.Data.QueryableCollectionView.InvalidateQueryableSourceCollection()
at Telerik.Windows.Data.QueryableCollectionView.EnsureCorrectQueryableSourceCollection(NotifyCollectionChangedEventArgs args)
at Telerik.Windows.Data.QueryableCollectionView.OnSourceCollectionChanged(Object sender, NotifyCollectionChangedEventArgs args)
at Telerik.Windows.Data.QueryableCollectionView.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.Windows.Controls.DomainDataSourceView.OnCollectionChanged(NotifyCollectionChangedEventArgs e)
at System.Windows.Controls.DomainDataSourceView.OnCollectionViewCollectionChanged(Object sender, NotifyCollectionChangedEventArgs e)
at System.Windows.Controls.EntityCollectionView.OnCollectionChanged(NotifyCollectionChangedEventArgs args)
at System.Windows.Controls.PagedEntityCollectionView.OnCollectionChanged(NotifyCollectionChangedEventArgs args)
at System.Windows.Controls.PagedEntityCollectionView.CompletePageMove(Int32 pageIndex)
at System.Windows.Controls.PagedEntityCollectionView.<.ctor>b__0(Object sender, EventArgs args)
at System.Windows.Controls.PagedEntityCollection.NotifyPageChanged(Int32 startPageIndex, Int32 pageIndex)
at System.Windows.Controls.DomainDataSource.RaisePageChanged(LoadContext loadContext, Int32 newStartPageIndex, Int32 newPageIndex)
at System.Windows.Controls.DomainDataSource.DomainContext_Loaded(LoadedDataEventArgs e, LoadContext loadContext)
at System.Windows.Controls.DomainDataSource.LoadData_Callback(LoadOperation loadOperation)
at System.ServiceModel.DomainServices.Client.LoadOperation.<>c__DisplayClass4`1.<Create>b__0(LoadOperation`1 arg)
at System.ServiceModel.DomainServices.Client.LoadOperation`1.InvokeCompleteAction()
at System.ServiceModel.DomainServices.Client.OperationBase.Complete(Object result)
at System.ServiceModel.DomainServices.Client.LoadOperation.Complete(DomainClientResult result)
at System.ServiceModel.DomainServices.Client.DomainContext.CompleteLoad(IAsyncResult asyncResult)
at System.ServiceModel.DomainServices.Client.DomainContext.<>c__DisplayClass1b.<Load>b__17(Object )}
Here is my code for adding the filter:
var defaultDateFilter = new ColumnFilterDescriptor((IDataFieldDescriptor)LogGridView.Columns["Timestamp"]);
defaultDateFilter.FieldFilter.Filter1.Operator = Telerik.Windows.Data.FilterOperator.IsGreaterThanOrEqualTo;
defaultDateFilter.FieldFilter.Filter1.Value = DateTime.UtcNow.Date.AddDays(-1);
defaultDateFilter.FieldFilter.Filter1.Member = "Timestamp";
defaultDateFilter.FieldFilter.Filter1.MemberType = typeof(DateTime);
_gridView.FilterDescriptors.Add(defaultDateFilter);
I have a GridView bound to a DomainDataSource. In my DomainDataSource, I have a default filter on one of the fields. I want this default filter to show up in the column filter. I try to do this by adding a ColumnFilterDescriptor to my grid after the LoadedData event of the DomainDataSource. However I am getting the following error whenever I add something to the FilterDescriptors collection:
{System.InvalidOperationException: Collection was modified; enumeration operation may not execute.
at System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource)
at System.Collections.Generic.List`1.Enumerator.MoveNextRare()
at System.Collections.Generic.List`1.Enumerator.MoveNext()
at Telerik.Windows.Controls.Data.DataFilter.CompositeFilterViewModel.FilterViewModelCollection.Add(IEnumerable`1 filterDescriptors)
at Telerik.Windows.Controls.Data.DataFilter.CompositeFilterViewModel.FilterViewModelCollection..ctor(CompositeFilterViewModel parent)
at Telerik.Windows.Controls.Data.DataFilter.CompositeFilterViewModel..ctor(ICompositeFilterDescriptor descriptor, IEnumerable`1 itemProperties, Boolean canUserCreateCompositeFilters, Action`1 filterOperatorsLoadingCallback)
at Telerik.Windows.Controls.Data.DataFilter.FilterViewModel.PrepareCompositeFilter(IFilterDescriptor filterDescriptor)
at Telerik.Windows.Controls.Data.DataFilter.FilterViewModel.Prepare(IFilterDescriptor filterDescriptor)
at Telerik.Windows.Controls.Data.DataFilter.FilterViewModel..ctor(IFilterDescriptor filterDescriptor, IEnumerable`1 itemPropertyDefinitions, Boolean canUserCreateCompositeFilters, Action`1 filterOperatorsLoadingCallback)
at Telerik.Windows.Controls.Data.DataFilter.CompositeFilterViewModel.FilterViewModelCollection.Add(IEnumerable`1 filterDescriptors)
at Telerik.Windows.Controls.Data.DataFilter.CompositeFilterViewModel.FilterViewModelCollection..ctor(CompositeFilterViewModel parent)
at Telerik.Windows.Controls.Data.DataFilter.CompositeFilterViewModel..ctor(ICompositeFilterDescriptor descriptor, IEnumerable`1 itemProperties, Boolean canUserCreateCompositeFilters, Action`1 filterOperatorsLoadingCallback)
at Telerik.Windows.Controls.Data.DataFilter.FilterViewModel.PrepareCompositeFilter(IFilterDescriptor filterDescriptor)
at Telerik.Windows.Controls.Data.DataFilter.RootFilterViewModel.Prepare(IFilterDescriptor filterDescriptor)
at Telerik.Windows.Controls.Data.DataFilter.FilterViewModel..ctor(IFilterDescriptor filterDescriptor, IEnumerable`1 itemPropertyDefinitions, Boolean canUserCreateCompositeFilters, Action`1 filterOperatorsLoadingCallback)
at Telerik.Windows.Controls.Data.DataFilter.RootFilterViewModel..ctor(ICompositeFilterDescriptor compositeFilterDescriptor, IEnumerable`1 itemPropertyDefinitions, Boolean canUserCreateCompositeFilters, Action`1 filterOperatorsLoadingCallback)
at Telerik.Windows.Controls.RadDataFilter.RefreshViewModel()
at Telerik.Windows.Controls.RadDataFilter.OnQueryableSourcePropertyChanged(Object sender, PropertyChangedEventArgs e)
at System.ComponentModel.PropertyChangedEventHandler.Invoke(Object sender, PropertyChangedEventArgs e)
at Telerik.Windows.Data.DataItemCollection.OnPropertyChanged(PropertyChangedEventArgs e)
at Telerik.Windows.Data.DataItemCollection.Telerik.Windows.Data.IWeakEventListener<System.ComponentModel.PropertyChangedEventArgs>.ReceiveWeakEvent(Object sender, PropertyChangedEventArgs args)
at Telerik.Windows.Data.WeakEvent.WeakListener`1.Handler(Object sender, TArgs args)
at Telerik.Windows.Data.QueryableCollectionView.OnPropertyChanged(PropertyChangedEventArgs e)
at Telerik.Windows.Data.QueryableCollectionView.OnPropertyChanged(String propertyName)
at Telerik.Windows.Data.QueryableCollectionView.InvalidateItemProperties()
at Telerik.Windows.Data.QueryableCollectionView.OnElementTypeChanged()
at Telerik.Windows.Data.QueryableCollectionView.set_ElementType(Type value)
at Telerik.Windows.Data.QueryableCollectionView.InitializeElementType()
at Telerik.Windows.Data.QueryableCollectionView.InvalidateQueryableSourceCollection()
at Telerik.Windows.Data.QueryableCollectionView.EnsureCorrectQueryableSourceCollection(NotifyCollectionChangedEventArgs args)
at Telerik.Windows.Data.QueryableCollectionView.OnSourceCollectionChanged(Object sender, NotifyCollectionChangedEventArgs args)
at Telerik.Windows.Data.QueryableCollectionView.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.Windows.Controls.DomainDataSourceView.OnCollectionChanged(NotifyCollectionChangedEventArgs e)
at System.Windows.Controls.DomainDataSourceView.OnCollectionViewCollectionChanged(Object sender, NotifyCollectionChangedEventArgs e)
at System.Windows.Controls.EntityCollectionView.OnCollectionChanged(NotifyCollectionChangedEventArgs args)
at System.Windows.Controls.PagedEntityCollectionView.OnCollectionChanged(NotifyCollectionChangedEventArgs args)
at System.Windows.Controls.PagedEntityCollectionView.CompletePageMove(Int32 pageIndex)
at System.Windows.Controls.PagedEntityCollectionView.<.ctor>b__0(Object sender, EventArgs args)
at System.Windows.Controls.PagedEntityCollection.NotifyPageChanged(Int32 startPageIndex, Int32 pageIndex)
at System.Windows.Controls.DomainDataSource.RaisePageChanged(LoadContext loadContext, Int32 newStartPageIndex, Int32 newPageIndex)
at System.Windows.Controls.DomainDataSource.DomainContext_Loaded(LoadedDataEventArgs e, LoadContext loadContext)
at System.Windows.Controls.DomainDataSource.LoadData_Callback(LoadOperation loadOperation)
at System.ServiceModel.DomainServices.Client.LoadOperation.<>c__DisplayClass4`1.<Create>b__0(LoadOperation`1 arg)
at System.ServiceModel.DomainServices.Client.LoadOperation`1.InvokeCompleteAction()
at System.ServiceModel.DomainServices.Client.OperationBase.Complete(Object result)
at System.ServiceModel.DomainServices.Client.LoadOperation.Complete(DomainClientResult result)
at System.ServiceModel.DomainServices.Client.DomainContext.CompleteLoad(IAsyncResult asyncResult)
at System.ServiceModel.DomainServices.Client.DomainContext.<>c__DisplayClass1b.<Load>b__17(Object )}
Here is my code for adding the filter:
var defaultDateFilter = new ColumnFilterDescriptor((IDataFieldDescriptor)LogGridView.Columns["Timestamp"]);
defaultDateFilter.FieldFilter.Filter1.Operator = Telerik.Windows.Data.FilterOperator.IsGreaterThanOrEqualTo;
defaultDateFilter.FieldFilter.Filter1.Value = DateTime.UtcNow.Date.AddDays(-1);
defaultDateFilter.FieldFilter.Filter1.Member = "Timestamp";
defaultDateFilter.FieldFilter.Filter1.MemberType = typeof(DateTime);
_gridView.FilterDescriptors.Add(defaultDateFilter);