To reproduce: - Add grid with enabled paging and filtering to a blank form. - Select the second page and apply a filter.
To reproduce: public Form1() { InitializeComponent(); radGridView1.Columns.Add("Id"); radGridView1.Columns.Add("ParentID"); radGridView1.Columns.Add("Name"); radGridView1.Relations.AddSelfReference(radGridView1.MasterTemplate, "Id", "ParentID"); for (int id = 1; id <= 3; id++) { radGridView1.MasterTemplate.Rows.Add(id, 0, "Node_" + id); for (int iChild = 1; iChild <= 5; iChild++) { int childId = id * 100 + iChild; radGridView1.MasterTemplate.Rows.Add(childId, id, "ChildNode_" + childId); } } foreach (GridViewHierarchyRowInfo row in this.radGridView1.Rows) { row.IsExpanded = true; } }
To reproduce: - Add the following column to a blank grid and new row or edit the existing one: GridViewMaskBoxColumn maskBoxColumn = new GridViewMaskBoxColumn(); maskBoxColumn.Name = "Dates"; maskBoxColumn.HeaderText = "Dates"; maskBoxColumn.MaskType = MaskType.FreeFormDateTime; maskBoxColumn.DataType = typeof(System.DateTime); radGridView1.MasterTemplate.Columns.Add(maskBoxColumn); this.radGridView1.Rows.Add(DateTime.Now.AddDays(5));
To reproduce: 1. Add a RadGridView and bind it to Northwind.Products table. 2. Use the following code: Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Me.ProductsTableAdapter.Fill(Me.NwindDataSet.Products) For Each col As GridViewColumn In Me.RadGridView1.Columns If Not col.HeaderText = "SupplierID" AndAlso Not col.HeaderText = "ProductID" Then col.ReadOnly = True End If Next Me.RadGridView1.AddNewRowPosition = SystemRowPosition.Bottom End Sub Private Sub RadGridView1_CellValidating(sender As Object, e As CellValidatingEventArgs) Handles RadGridView1.CellValidating If e.Value Is Nothing Then If MessageBox.Show("Incorrect", "error", MessageBoxButtons.OKCancel) = Windows.Forms.DialogResult.OK Then e.Cancel = True End If End If End Sub 3. Run the project and go to the new row ,cell "SupplierID". 4. Clear the value and press Tab key. As a result the message box for error indication is shown twice. Workaround: 'register the custom row behavior Dim gridBehavior As BaseGridBehavior = TryCast(RadGridView1.GridBehavior, BaseGridBehavior) gridBehavior.UnregisterBehavior(GetType(GridViewNewRowInfo)) gridBehavior.RegisterBehavior(GetType(GridViewNewRowInfo), New MyNewRowBehavior()) Me.RadGridView1.GridViewElement.Navigator = New MyGridNavigator() Public Class MyNewRowBehavior Inherits GridNewRowBehavior Protected Overrides Function ProcessTabKey(keys As KeyEventArgs) As Boolean If Me.GridControl.AddNewRowPosition = SystemRowPosition.Bottom AndAlso _ Me.GridControl.IsInEditMode AndAlso Me.GridViewElement.Navigator.IsLastColumn(GridViewElement.CurrentColumn) Then Me.GridControl.Tag = "SuspendValidation" End If Return MyBase.ProcessTabKey(keys) End Function End Class Public Class MyGridNavigator Inherits BaseGridNavigator Public Overrides Function SelectFirstColumn() As Boolean If Me.GridViewElement.GridControl.Tag = "SuspendValidation" Then Me.GridViewElement.GridControl.Tag = Nothing Return False End If Return MyBase.SelectFirstColumn() End Function End Class
To reproduce: - Set EnterKeyMode to EnterMovesToNextRow. - Enter an invalid value in the first cell and press enter two times. - Enter valid value and press enter again. - You will notice that the current row is moved appropriately.
To reproduce: - Add a grid to a blank form. - Group the grid on a single column and expand a group row. - Add and then remove a summary row by calling the clear method. - You will notice that the summary row is not removed. Workaround: reset the groups after the summary rows are cleared: radGridView1.SummaryRowsBottom.Clear(); List<GroupDescriptor> list = new List<GroupDescriptor>(); foreach (var item in radGridView1.GroupDescriptors) { list.Add(item); } radGridView1.GroupDescriptors.Clear(); radGridView1.MasterTemplate.Refresh(); foreach (var item in list) { radGridView1.GroupDescriptors.Add(item); } radGridView1.MasterTemplate.Refresh();
To reproduce: add a RadGridView and bind it to Employees data table. Use the following code snippet: Me.RadGridView1.EnableGrouping = True Me.RadGridView1.EnableFiltering = True Dim summaryItem As New GridViewSummaryItem() summaryItem.Name = "Address" summaryItem.Aggregate = GridAggregateFunction.Count Dim summaryRowItem As New GridViewSummaryRowItem() summaryRowItem.Add(summaryItem) Me.RadGridView1.SummaryRowsTop.Add(summaryRowItem) Me.RadGridView1.MasterTemplate.ShowParentGroupSummaries = True 1. Group by "Title" and expand "Sales Representative" group. 2. Group by "Country" and "City". 3.Expand "Sales Representative" group >> "UK" sub-group >> "London" sub-group. You will notice that the summary row shows "3", because you actually have 3 employees in "London" group. 4.Filter by "FirstName" (Contains: "a" for example). As a result 2 employess will remain in "London" group, but the summary row will continue displaying "3". The attached gif file illustrates better the described behavior. Workaround: in the FilterChanged event store the applied GroupDescriptors, clear the RadGridView.GroupDescriptors collection, and add again the stored descriptors. Note that it is necessary to store the expanded groups and restore their state as well.
RadDateTimeEditor the entire date cannot be selected when the editor is initialized.
To reproduce: - Bind the grid to a binding list of custom property which has a bool value. - Add a filter that shows only false values. - Change some (more than one) of the underlying values to true. - You will notice that the rows with the new value are still visible.
To reproduce: Set these properties: radGridView1.SelectionMode = GridViewSelectionMode.FullRowSelect; radGridView1.MultiSelect = true; Select a row, hold Ctrl and click the same cell which is selected, you will see that the SelectionChanging event, along with the SelectionChanged one will not be fired. Workaround: Use the PropertyChanging event of the rows: this.Grid.Rows.ToList().ForEach(x => x.PropertyChanging += x_PropertyChanging); .... void x_PropertyChanging(object sender, Telerik.WinControls.Interfaces.PropertyChangingEventArgsEx e) { if (e.PropertyName == "IsSelected") { } }
To reproduce: - Bind the grid to an ObservableCollection and set its AddNewBoundRowBeforeEdit property to true. - Click in the new row and then click back in already added row.
To reproduce: - Type &1 in a grid cell and then press enter to exit edit mode. - Press tab for example to move to the next cell. - Press 1 again you will notice that the digit does not appear in the cell.
Currently the Paging functionality does not support server side operations. It should be extended to support them, e.g. with EntityFramework and Telerik Data Access
To reproduce: 1. Add GridView which inherits the RadGridView 2. Populate the grid with some data 3. Add conditional formatting and set RowBackColor and CellBackColor 4. Subscribe to RowFormatting event and change the font of selected row: void radGridView2_RowFormatting(object sender, RowFormattingEventArgs e) { if (e.RowElement.IsSelected) { e.RowElement.Font = new Font(this.Font.FontFamily, this.Font.Size + 2, FontStyle.Bold); } else { e.RowElement.ResetValue(LightVisualElement.FontProperty, ValueResetFlags.Local); //e.RowElement.Font = this.Font; } } 5. Select row with conditional formatting. The font of selected row is bold which is correct. Select another row and you will see that the previous row is still bold. Workaround: Subscribe to CellFormatting event instead RowFormatting void radGridView2_CellFormatting(object sender, CellFormattingEventArgs e) { if (e.Row.IsSelected) { e.CellElement.Font = new Font(this.Font.FontFamily, this.Font.Size + 2, FontStyle.Bold); } else { e.CellElement.ResetValue(LightVisualElement.FontProperty, ValueResetFlags.Local); } }
To reproduce: use the following code snippet: DataTable dt = new DataTable(); dt.Columns.Add("Id", typeof(int)); dt.Columns.Add("Name", typeof(string)); dt.Columns.Add("IsActive", typeof(bool)); for (int i = 0; i < 20; i++) { if (i % 5 == 0) { dt.Rows.Add(i, "Item" + i, true); } { dt.Rows.Add(i, "Item" + i, DBNull.Value); } } this.radGridView1.DataSource = dt; this.radGridView1.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill; this.radGridView1.EnableFiltering = true; Try to filter by "Name" column via entering "4". As a result an InvalidCastException occurs. Workaround: initialize default value for the cells belonging to GridViewCheckBoxColumn with false if it is DBNull: foreach (GridViewRowInfo r in this.radGridView1.Rows) { if (r.Cells["IsActive"].Value == DBNull.Value) { r.Cells["IsActive"].Value = false; } }
When Excel-like filtering is enabled and the user selects an item from the "Available Filters" drop down menu, a CompositeFilterForm is shown.
When the current cell belongs to one of the data rows and you click with the left mouse button over a GridFilterCellElement , the editor is activated. However, if you navigate with the arrow keys, the editor is not activated and the user can not see any indication about the current cell. Workaround: private void radGridView1_ViewCellFormatting(object sender, Telerik.WinControls.UI.CellFormattingEventArgs e) { GridFilterCellElement filterCell = e.CellElement as GridFilterCellElement; if (filterCell != null) { if (filterCell.IsCurrent) { filterCell.BorderWidth = 3; } else { filterCell.BorderWidth = 1; } } }
To reproduce: use the following code snippet: Steps to repeat: 1. A Self-Referencing Hierarchical Grid is displayed, grouped by the "Title" column. 3. Expand the first group. 4. Check the first row check box. As a result the editor is activated and its value is changed. 5. Click on the "+" sign in 1st row of data to expand and see child rows or just close the editor. You will notice that the group is unexpectedly collapsed. Workaround: private void radGridView1_ValueChanged(object sender, EventArgs e) { if (this.radGridView1.ActiveEditor is RadCheckBoxEditor) { if (this.radGridView1.CurrentRow.Group != null && this.radGridView1.CurrentRow.Group.IsExpanded) { this.radGridView1.EndEdit(); this.radGridView1.CurrentRow.Group.Expand(); } } }
To reproduce: public Form1() { InitializeComponent(); DataTable dt = new DataTable(); dt.Columns.Add("Id", typeof(int)); dt.Columns.Add("ParentId", typeof(int)); dt.Columns.Add("IsActive", typeof(bool)); dt.Columns.Add("Title", typeof(string)); for (int i = 1; i < 6; i++) { dt.Rows.Add(i, 0, i % 2 == 0, "Title" + i); } Random rand = new Random(); int parentIndex = 0; for (int i = 6; i < 30; i++) { parentIndex = rand.Next(1, 6); dt.Rows.Add(i, parentIndex, i % 2 == 0, "Title" + i); } radGridView1.DataSource = dt; radGridView1.AutoSizeColumnsMode = Telerik.WinControls.UI.GridViewAutoSizeColumnsMode.Fill; radGridView1.Relations.AddSelfReference(radGridView1.MasterTemplate, "Id", "ParentId"); GroupDescriptor descriptor = new GroupDescriptor(); descriptor.GroupNames.Add("Title", System.ComponentModel.ListSortDirection.Ascending); radGridView1.GroupDescriptors.Add(descriptor); this.radGridView1.AllowSearchRow = true; }