If you refresh an object set property of entity context, the RadGridView is not updated. The sample code below does not work: this.radGridView1.DataSource = entities.Countries; int maxId = (from c in entities.Countries orderby c.Id descending select c.Id).First(); Country country = new Country(); country.Id = maxId + 1; country.Name = Path.GetRandomFileName(); entities.Countries.AddObject(country); entities.SaveChanges(System.Data.Objects.SaveOptions.AcceptAllChangesAfterSave); entities.Refresh(System.Data.Objects.RefreshMode.StoreWins, entities.Countries);
To reproduce: void radGridView1_CurrentRowChanged(object sender, Telerik.WinControls.UI.CurrentRowChangedEventArgs e) { e.CurrentRow.Cells[2].ColumnInfo.IsCurrent = true; }
- Create a new project containing RadGridView - Build hierarchy with large text data in cells - Set the AutoSizeRows property to true and AutoSizeColumnMode to Fill - Run the project, scroll down and try to click on a cell
To reproduce: void grid_RowValidating(object sender, RowValidatingEventArgs e) { e.Cancel = true; } Pressing the escape key should cancel the edit mode and revert the value
I have a GridView (Winforms v. 2017.3.1017.40, same problem with 2017.2.502.40) configured as on the attached screenshot (made some groups, made a search, and used the "excel-like" filter on a column to uncheck some values). Then I try to click on some column headers to sort the grid. After a few clicks, I get this error : InvalidOperationException: La collection a été modifiée ; l'opération d'énumération peut ne pas s'exécuter. I got different stacktrace with the same error : InvalidOperationException: La collection a été modifiée ; l'opération d'énumération peut ne pas s'exécuter. at System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource) at System.Collections.Generic.List`1.Enumerator.MoveNextRare() at System.Collections.Generic.List`1.Enumerator.MoveNext() at Telerik.WinControls.UI.DataGroup.<GetEnumerator>d__0.MoveNext() at Telerik.WinControls.UI.GridViewGroupRowInfo.get_ChildRows() at Telerik.WinControls.UI.GridViewRowInfo.HasChildRows() at Telerik.WinControls.UI.PrintGridTraverser.CanStepInHierarchy() at Telerik.WinControls.UI.GridTraverser.StepInHierarchy() at Telerik.WinControls.UI.GridTraverser.MoveNextCore() at Telerik.WinControls.UI.GridTraverser.MoveNext() at Telerik.WinControls.UI.GridViewSearchRowInfo.worker_DoWork(Object sender, DoWorkEventArgs e) at System.ComponentModel.BackgroundWorker.OnDoWork(DoWorkEventArgs e) at System.ComponentModel.BackgroundWorker.WorkerThreadStart(Object argument) ----- InvalidOperationException: Failed to compare two elements in the array. ---> NullReferenceException: Object reference not set to an instance of an object. at Telerik.WinControls.UI.GridViewRowInfoComparer.CompareRows(GridViewRowInfo x, GridViewRowInfo y, SortDescriptorCollection context) at System.Collections.Generic.ArraySortHelper`1.InternalBinarySearch(T[] array, Int32 index, Int32 length, T value, IComparer`1 comparer) at System.Collections.Generic.ArraySortHelper`1.BinarySearch(T[] array, Int32 index, Int32 length, T value, IComparer`1 comparer) --- End of inner exception stack trace --- at System.Collections.Generic.ArraySortHelper`1.BinarySearch(T[] array, Int32 index, Int32 length, T value, IComparer`1 comparer) at System.Collections.Generic.List`1.BinarySearch(Int32 index, Int32 count, T item, IComparer`1 comparer) at Telerik.Collections.Generic.HybridIndex`1.PerformWithQuickSort() at Telerik.Collections.Generic.HybridIndex`1.get_Items() at Telerik.Collections.Generic.Index`1.GetEnumerator() at Telerik.WinControls.Data.GroupBuilder`1.Perform(IReadOnlyCollection`1 items, Int32 level, Group`1 parent) at Telerik.WinControls.Data.GroupBuilder`1.get_Groups() at Telerik.WinControls.UI.GridViewInfo.Refresh() at Telerik.WinControls.UI.GridViewInfo.get_ChildRows() at Telerik.WinControls.UI.ViewInfoTraverser.SetCollectionForStage(Boolean initializeCollection) at Telerik.WinControls.UI.ViewInfoTraverser.ChangeCollectionForward() at Telerik.WinControls.UI.ViewInfoTraverser.MoveNextCore() at Telerik.WinControls.UI.ViewInfoTraverser.MoveNext() at Telerik.WinControls.UI.GridTraverser.MoveNextCore() at Telerik.WinControls.UI.GridTraverser.MoveNext() at Telerik.WinControls.UI.BaseGridNavigator.NavigateToRow(GridViewRowInfo row, Boolean select) at Telerik.WinControls.UI.BaseGridNavigator.ProcessViewChangedEvent(GridViewEvent eventData) at Telerik.WinControls.UI.BaseGridNavigator.ProcessEventCore(GridViewEvent eventData) at Telerik.WinControls.UI.GridViewEventProcessEntity.ProcessCollection(GridViewEvent gridEvent, PriorityWeakReferenceList list, GridEventProcessMode processMode) at Telerik.WinControls.UI.GridViewEventProcessEntity.ProcessEvent(GridViewEvent gridEvent) at Telerik.WinControls.UI.GridViewSynchronizationService.NotifyListeners(GridViewEvent gridEvent) at Telerik.WinControls.UI.GridViewSynchronizationService.FlushEvents() at Telerik.WinControls.UI.GridViewSynchronizationService.DispatchEvent(GridViewEvent gridEvent) at Telerik.WinControls.UI.GridViewSynchronizationService.DispatchEvent(GridViewTemplate template, GridViewEvent eventData, Boolean postUI) at Telerik.WinControls.UI.GridViewTemplate.DispatchDataViewChangedEvent(Object sender, DataViewChangedEventArgs args) at Telerik.WinControls.UI.GridViewTemplate.OnViewChanged(Object sender, DataViewChangedEventArgs e) at Telerik.WinControls.UI.MasterGridViewTemplate.OnViewChanged(Object sender, DataViewChangedEventArgs e) at Telerik.WinControls.Data.RadDataView`1.RebuildData(Boolean notify) at Telerik.WinControls.Data.RadDataView`1.OnNotifyPropertyChanged(PropertyChangedEventArgs e) at Telerik.WinControls.Data.RadCollectionView`1.OnNotifyPropertyChanged(String propertyName) at Telerik.WinControls.UI.GridViewSortDescriptorCollection.OnCollectionChanged(NotifyCollectionChangedEventArgs args) at System.ComponentModel.PropertyChangedEventHandler.Invoke(Object sender, PropertyChangedEventArgs e) at Telerik.WinControls.Data.SortDescriptor.set_Direction(ListSortDirection value) at Telerik.WinControls.UI.GridViewColumn.Sort(RadSortOrder sortOrder, Boolean multiSortMode) at Telerik.WinControls.UI.GridHeaderCellElement.Sort(RadSortOrder sortOrder) at Telerik.WinControls.UI.GridHeaderRowBehavior.OnMouseUp(MouseEventArgs e) at Telerik.WinControls.UI.BaseGridBehavior.OnMouseUp(MouseEventArgs e) at Telerik.WinControls.UI.RadGridView.OnMouseUp(MouseEventArgs e) at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) at System.Windows.Forms.Control.WndProc(Message& m) at Telerik.WinControls.RadControl.WndProc(Message& m) at Telerik.WinControls.UI.RadGridView.WndProc(Message& m) at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) ------ 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.WinControls.UI.DataGroup.<GetEnumerator>d__0.MoveNext() [...] at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source) at Alto.Client.Controls.Dispatch.DispatchResources.DeliveryPointFilterManager.get_DeliveryPointsVisible() in d:\Builds\45153\Alto\Alto.Prod\src\Alto\Alto.Client\Controls\Dispatch\DispatchResources\DeliveryPointFilterManager.cs:line 38 at Alto.Client.Controls.Dispatch.DispatchResources.UcDeliveryPoint.get_Title() in d:\Builds\45153\Alto\Alto.Prod\src\Alto\Alto.Client\Controls\Dispatch\DispatchResources\UcDeliveryPoint.cs:line 1520 at Alto.Client.Controls.Dispatch.DispatchResources.UcDeliveryPoint.updatePanelTitle() in d:\Builds\45153\Alto\Alto.Prod\src\Alto\Alto.Client\Controls\Dispatch\DispatchResources\UcDeliveryPoint.cs:line 543 at Alto.Client.Controls.Dispatch.DispatchResources.UcDeliveryPoint.onFilterChanged(Object sender, GridViewCollectionChangedEventArgs e) in d:\Builds\45153\Alto\Alto.Prod\src\Alto\Alto.Client\Controls\Dispatch\DispatchResources\UcDeliveryPoint.cs:line 547 at Telerik.WinControls.UI.GridViewCollectionChangedEventHandler.Invoke(Object sender, GridViewCollectionChangedEventArgs e) at Telerik.WinControls.UI.RadGridView.OnFilterChanged(Object sender, GridViewCollectionChangedEventArgs e) at Telerik.WinControls.UI.EventDispatcher.RaiseEvent[T](Object eventKey, Object sender, T args) at Telerik.WinControls.UI.GridViewFilterDescriptorCollection.OnCollectionChanged(NotifyCollectionChangedEventArgs args) at Telerik.Collections.Generic.NotifyCollection`1.InsertItem(Int32 index, T item) at Telerik.WinControls.UI.GridViewFilterDescriptorCollection.InsertItem(Int32 index, FilterDescriptor item) at System.Collections.ObjectModel.Collection`1.Add(T item) at Telerik.WinControls.UI.GridViewDataColumn.SetFilterDescriptor(FilterDescriptor value) at Telerik.WinControls.UI.GridHeaderCellElement.filterPopup_FilterConfirmed(Object sender, EventArgs e) at Telerik.WinControls.UI.BaseFilterPopup.OnFilterConfirmed() at Telerik.WinControls.UI.RadListFilterPopup.OnButtonOkClick(EventArgs e) at Telerik.WinControls.UI.RadListFilterPopup.ButtonOK_Click(Object sender, EventArgs e) at Telerik.WinControls.RadElement.OnClick(EventArgs e) at Telerik.WinControls.UI.RadButtonItem.OnClick(EventArgs e) at Telerik.WinControls.UI.RadButtonElement.OnClick(EventArgs e) at Telerik.WinControls.RadElement.DoClick(EventArgs e) at Telerik.WinControls.RadElement.RaiseBubbleEvent(RadElement sender, RoutedEventArgs args) at Telerik.WinControls.RadItem.RaiseBubbleEvent(RadElement sender, RoutedEventArgs args) at Telerik.WinControls.RadElement.RaiseRoutedEvent(RadElement sender, RoutedEventArgs args) at Telerik.WinControls.RadElement.RaiseBubbleEvent(RadElement sender, RoutedEventArgs args) at Telerik.WinControls.RadItem.RaiseBubbleEvent(RadElement sender, RoutedEventArgs args) at Telerik.WinControls.RadElement.RaiseRoutedEvent(RadElement sender, RoutedEventArgs args) at Telerik.WinControls.RadElement.DoMouseUp(MouseEventArgs e) at Telerik.WinControls.ComponentInputBehavior.OnMouseUp(MouseEventArgs e) at Telerik.WinControls.RadControl.OnMouseUp(MouseEventArgs e) at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) at System.Windows.Forms.Control.WndProc(Message& m) at System.Windows.Forms.ScrollableControl.WndProc(Message& m) at Telerik.WinControls.RadControl.WndProc(Message& m) at Telerik.WinControls.UI.RadPopupControlBase.WndProc(Message& m) at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) ---- InvalidOperationException: Collection was modified; enumeration operation may not execute. at System.Collections.Generic.List`1.Enumerator.MoveNextRare() at Telerik.WinControls.UI.DataGroup.<GetEnumerator>d__0.MoveNext() at Telerik.WinControls.Data.GroupBuilder`1.Perform(IReadOnlyCollection`1 items, Int32 level, Group`1 parent) at Telerik.WinControls.Data.DataItemGroup`1.get_Groups() at Telerik.WinControls.UI.DataGroup.get_Groups() at Telerik.WinControls.UI.GridViewTemplate.InvalidateSummaryRowsCore(DataGroup group, Boolean invalidateChildren) at Telerik.WinControls.UI.GridViewTemplate.InvalidateSummaryRowsCore(DataGroup group, Boolean invalidateChildren) at Telerik.WinControls.UI.GridViewTemplate.InvalidateGroupSummaryRows(DataGroup group, Boolean invalidateChildren) at Telerik.WinControls.UI.GridViewTemplate.RefreshSummaryRowsInGroup(NotifyCollectionChangedEventArgs e) at Telerik.WinControls.UI.GridViewTemplate.RefreshAggregates(NotifyCollectionChangedEventArgs e) at Telerik.WinControls.UI.MasterGridViewTemplate.OnViewChanged(Object sender, DataViewChangedEventArgs e) at Telerik.WinControls.Data.RadDataView`1.RebuildData(Boolean notify) at Telerik.WinControls.Data.RadDataView`1.OnNotifyPropertyChanged(PropertyChangedEventArgs e) at Telerik.WinControls.Data.RadCollectionView`1.OnNotifyPropertyChanged(String propertyName) at Telerik.WinControls.UI.GridViewSortDescriptorCollection.OnCollectionChanged(NotifyCollectionChangedEventArgs args) at Telerik.WinControls.UI.GridViewSortDescriptorCollection.RemoveItem(Int32 index) at Telerik.WinControls.UI.GridViewColumn.Sort(RadSortOrder sortOrder, Boolean multiSortMode) at Telerik.WinControls.UI.GridHeaderCellElement.Sort(RadSortOrder sortOrder) at Telerik.WinControls.UI.GridHeaderRowBehavior.OnMouseUp(MouseEventArgs e) at Telerik.WinControls.UI.BaseGridBehavior.OnMouseUp(MouseEventArgs e) at Telerik.WinControls.UI.RadGridView.OnMouseUp(MouseEventArgs e) at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) at System.Windows.Forms.Control.WndProc(Message& m) at Telerik.WinControls.RadControl.WndProc(Message& m) at Telerik.WinControls.UI.RadGridView.WndProc(Message& m) at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
Steps to reproduce: 1. Add a grid to a form and make it read only 2. Add a masked box column and set the mask 3. Add some data and run the project You will see that the mask is not applied to the values in the mask box column Comment: This is not an issue. The mask is applied after editing the text with RadMaskedEditBox, in read-only mode there is no masked editor created. You should use the conversion layer in RadGridView to solve the issue. Check the GridView >> Manipulated Data >> Convert Values example from our demo application.
To reproduce: please refer to the attached sample project. Workaround: this.radGridView1.TableElement.ScrollToRow(this.radGridView1.RowCount-1);
When you set a RadGridView's SelectionMode to GridViewSelectionMode.CellSelect and then you highlight full rows by using the row header, the SelectedRows collection is empty. Telerik support informed me this is "as expected" and that I should use "SelectedCells" collection when using the CellSelect Mode. While this is a decent workaround I don't see why SelectedRows collection can't be filled when the entire row is actually highlighted.
1. Create a new project with RadGridView. 2. Bind it and set grouping. 3. Add a summary row and set ShowParentGroupSummaries property to true. 4. Handle the ViewCellFormatting event and set all summary rows to be IsVisible = false when the processed cell is GridSummaryCellElement: void radGridView1_ViewCellFormatting(object sender, CellFormattingEventArgs e) { if (e.CellElement is GridSummaryCellElement) { e.Row.IsVisible = false; } } CORRECT WAY TO HANDLE THIS CASE: Hide the summary rows in the groups you want after grouping/data binding. To hide the first bottom summary row of the first group in a RadGridView use the following code: this.radGridView1.Groups[0].GroupRow.BottomSummaryRows[0].IsVisible = false;
To reproduce: - add RadGridView and fill it with data; - use the following code for saving the layout: string layout; using (MemoryStream ms = new MemoryStream()) { radGridView1.SaveLayout(ms); ms.Position = 0; byte[] buffer = new byte[ms.Length - 1]; ms.Read(buffer, 0, buffer.Length); layout = Convert.ToBase64String(buffer); ms.Close(); } When you try to load the saved layout, using the following code, DataException is thrown: using (MemoryStream stream = new MemoryStream(Convert.FromBase64String(layout))) { radGridView1.LoadLayout(stream); } Workaround: save the layout in xml file
Hi,
I have a question regarding RadGridView. When I edit a cell in GridView and then click on a button (outside of gridview) immediately (i.e I don't click on another cell to exit edit mode), the Gridview is still edit mode. Please refer to the short video named "Without Using EndEdit()" to easily understand my point here.
In order to exit the edit mode, I try the following code:
Private Sub CustomGridView_LostFocus(sender As Object, e As EventArgs) Handles Me.LostFocus Me.EndEdit() End Sub
With this code, the gridview does exit the edit mode when I click on another button. But there is a problem with this method is that afterwards, I cannot edit the cell anymore. Please refer to the short video named "Using EndEdit()" to better understand the problem.
So my question here is, is there any way that I can exit edit mode when clicking on another button right after editing a cell?
Thank you for your help.
Best regards,
Tran
To reproduce:
Update the data source directly and check the OldItems array.
Hi, Following to the workaroud (flag IsSearchAsync) provided (https://feedback.telerik.com/Project/154/Feedback/Details/245938-fix-radgridview-having-groups-filters-sort-descriptors-and-search-query-in-t), we discovered two issues : 1) the behavior of the grid is changed while using IsSearchAsync as true or false (see 2018-08-01_1849_DragDrop_behavior_with_IsSearchAsync.swf video attached). When set to true, the line found by the searchbox is automatically reselected. When the flag is set to false, it's not the case. 2) while playing with drag&drop, after some time the grid became unstable (see 2018-08-01_1847_-_dragdrop_issue_with_IsAsyncSearch.swf video attached). You can see that at the beginning, the D&D works fine. At 0:20 I can't select any line, and when I try to D&D, it drops always the same customer. At 0:40 you can see that even the SearchBox is broken and the progressbar is looping forever
To reproduce: please refer to the attached sample project and gif file Workaround: GridViewSpreadExport spreadExporter = new GridViewSpreadExport(this.radGridView1); spreadExporter.ExportFormat = SpreadExportFormat.Pdf; spreadExporter.ExportVisualSettings = true; SpreadExportRenderer exportRenderer = new SpreadExportRenderer(); spreadExporter.RunExport(exportFile, exportRenderer); Process.Start(exportFile);
Use attached to reproduce. This is not an issue. Performing Begin/End update disposes of all elements along with the globally declared item. You need to check if the item is disposed of: void ContextMenuOpening(object sender, ContextMenuOpeningEventArgs e) { if (menuItem.IsDisposed) { menuItem = new RadMenuItem(); menuItem.Text = "Custom menu item"; menuItem.Click += menuItem_Click; } e.ContextMenu.Items.Add(menuItem); }
To reproduce: please open the attached sample project and follow the steps illustrated in the attached gif file. Workaround: 1. You still can scroll while dragging a row by using the mouse wheel. 2. Use the grid in unbound mode and set the AllowRowReorder property to true instead of using a custom RadDragDropService. 3. Use a custom drag and drop service: public class CustomDragDropService : RadGridViewDragDropService { public CustomDragDropService(RadGridViewElement gridViewElement) : base(gridViewElement) { } public override string Name { get { return typeof(RadGridViewDragDropService).Name; } } protected override void HandleMouseMove(System.Drawing.Point mousePosition) { base.HandleMouseMove(mousePosition); System.Drawing.Point location = this.GridViewElement.ElementTree.Control.PointToClient(Control.MousePosition); GridTableElement tableElement = this.GetTableElementAtPoint(location); ISupportDrag supportDrag = this.Context as ISupportDrag; object dataContext = supportDrag.GetDataContext(); if (this.AllowAutoScrollRowsWhileDragging && dataContext == null) { ScrollRows(tableElement, location); } } private void ScrollRows(GridTableElement tableElement, System.Drawing.Point location) { ScrollableRowsContainerElement scrollableRows = tableElement.ViewElement.ScrollableRows; RadScrollBarElement vScrollbar = GetVeritcalScrollbar(tableElement); System.Drawing.Rectangle containerBounds = scrollableRows.ControlBoundingRectangle; if (containerBounds.Contains(location) || location.X < containerBounds.X || location.X > containerBounds.Right) { return; } int delta = 0; if (location.Y > containerBounds.Bottom) { delta = location.Y - containerBounds.Bottom; } else if (location.Y < containerBounds.Y) { delta = location.Y - containerBounds.Y; } if (delta != 0 && vScrollbar.Visibility == ElementVisibility.Visible) { vScrollbar.Value = ClampValue(vScrollbar.Value + delta, vScrollbar.Minimum, vScrollbar.Maximum - vScrollbar.LargeChange + 1); } } private int ClampValue(int value, int minimum, int maximum) { if (value < minimum) { return minimum; } if (maximum > 0 && value > maximum) { return maximum; } return value; } private RadScrollBarElement GetVeritcalScrollbar(GridTableElement tableElement) { if (GridViewElement.UseScrollbarsInHierarchy) { return tableElement.VScrollBar; } return GridViewElement.TableElement.VScrollBar; } } public RadForm1() { InitializeComponent(); CustomDragDropService customService = new CustomDragDropService(radGridView1.GridViewElement); radGridView1.GridViewElement.RegisterService(customService); }
To reproduce - Start the attached project press "Add in code" then "Save" - The row is still not added to the underlying data table. Workaround: TryCast(Me.radGridView1.Rows.Last().DataBoundItem, IEditableObject).EndEdit()
To reproduce: please refer to the attached sample project and gif file illustrating the behavior. Workaround: in order to cancel adding of the new row, you can call the MasterView.TableAddNewRow.CancelAddNewRow method: private void radGridView1_UserAddingRow(object sender, Telerik.WinControls.UI.GridViewRowCancelEventArgs e) { e.Cancel = true; this.radGridView1.MasterView.TableAddNewRow.CancelAddNewRow(); int index = this.radGridView1.Rows.Count; this.radGridView1.Rows.Add(index, "Row" + index); }