RadGrid's HierarchyRowTraverser throws an exception when all levels are expanded and filter is applied Please, tests with the attached project.
If your screen scaling is set to 125% the location of the editors that appear in the Composite Filter Form is not correct.
To reproduce, use the following localization provider and set a fitler to a boolean column in RadGridView, via the Custom filtering dialog. class MyRadGridLocalizationProvider : RadGridLocalizationProvider { public const string CustomTrue = "CustomTRUE"; public const string CustomFalse = "CustomFALSE"; public override string GetLocalizedString(string id) { if (id == "CustomFilterDialogTrue") { return CustomTrue; } else if (id == "CustomFilterDialogFalse") { return CustomFalse; } else { return base.GetLocalizedString(id); } } } Workaround - create custom type converter as follows: public class MyBooleanConverter : BooleanConverter { public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value) { if (value is string) { string text = Convert.ToString(value); if (text == MyRadGridLocalizationProvider.CustomTrue) { return true; } else if (text == MyRadGridLocalizationProvider.CustomFalse) { return false; } } return base.ConvertFrom(context, culture, value); } } and apply it to the check box column: radGridView1.Columns["BoolColumn"].DataTypeConverter = new MyBooleanConverter();
One should be able to create a relation in order to produce the following hierarchy: public class MainObject { public ObservableCollection<LibraryObject> ListOfLibraryObjects { get; set; } } public class LibraryObject { public string LibraryName { get; set; } public TrajectoryManager TheTrajectoryManager { get; set; } } public class TrajectoryManager { public ObservableCollection<TrajectoryData> ListOfTrajectoryData { get; set; } } public class TrajectoryData { public string Name { get; set; } } WORKAROUND: public class MainObject { public ObservableCollection<LibraryObject> ListOfLibraryObjects; } public class LibraryObject { public string LibraryName { get; set; } public ObservableCollection<TrajectoryData> ListOfTrajectoryData { get; set; } // public TrajectoryManager TheTrajectoryManager; //} //public class TrajectoryManager //{ // public ObservableCollection<TrajectoryData> ListOfTrajectoryData; } public class TrajectoryData { public string Name { get; set; } }
Steps to reproduce: 1. Add a grid to a form 2. Add a self-reference hierarchy data and relation 3. Group the data on a column Enter edit mode for a cell and directly click on the expand/collapse sign of a hierarchy row. You will see that RadGridView does not behave correctly all the time.
Deleting a Template in the Property Builder does work.
Steps to reproduce: 1. Add a grid to a form and add two expression columns 2. Enable Excel-like filtering 3. Add data 4. Run the project and filter on both expression columns You will see an exception.
IMPROVE. RadGridView - add ability to change and customize the font (bold, italic, etc) in the ConditionalFormattingForm
Currently, it is only possible to define two filter conditions in the Custom Filter Dialog. It would be better if there is possibility for adding multiple filter conditions, similar to the possibility given by the Conditional Formatting Dialog
To reproduce: Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load BindGrid() End Sub Private Sub BindGrid() Dim r As New Random() Dim table As New DataTable() table.Columns.Add("ID", GetType(Integer)) table.Columns.Add("Name", GetType(String)) table.Columns.Add("Bool", GetType(Boolean)) For i As Integer = 0 To 39 table.Rows.Add(i, "Row " & i, If(r.[Next](10) > 5, True, False)) Next Me.RadGridView1.DataSource = table End Sub Dim saveName As Integer Private Sub RadGridView1_CellEndEdit(sender As Object, e As Telerik.WinControls.UI.GridViewCellEventArgs) Handles RadGridView1.CellEndEdit If e.Column.Name = "Name" Then saveName = RadGridView1.CurrentRow.Cells("ID").Value BindGrid() End If End Sub Private Sub RadGridView1_DataBindingComplete(sender As Object, e As Telerik.WinControls.UI.GridViewBindingCompleteEventArgs) Handles RadGridView1.DataBindingComplete For Each row As GridViewRowInfo In RadGridView1.Rows If row.Cells("ID").Value = saveName Then row.IsCurrent = True RadGridView1.TableElement.EnsureRowVisible(row) Exit For End If Next End Sub WORKAROUND: Rebind the grid in the CellValueChanged event instead of the CellEndEdit event: Private Sub RadGridView1_CellValueChanged(sender As Object, e As Telerik.WinControls.UI.GridViewCellEventArgs) Handles RadGridView1.CellValueChanged If e.Column.Name = "Name" Then saveName = RadGridView1.CurrentRow.Cells("ID").Value BindGrid() End If End Sub
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;
RadGridView - current row changes even when canceling the RowValidating event. Code to reproduce: public Form1() { InitializeComponent(); radGridView1.AutoGenerateColumns = false; radGridView1.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill; radGridView1.Columns.Add(new GridViewTextBoxColumn("A", "A")); radGridView1.Columns.Add(new GridViewTextBoxColumn("B", "B")); radGridView1.Columns.Add(new GridViewTextBoxColumn("C", "C")); radGridView1.Rows.Add("A", "AA", "AAA"); radGridView1.Rows.Add("B", "BB", "BBB"); radGridView1.Rows.Add("C", "CC", "CCC"); radGridView1.Rows.Add("D", "DD", "DDD"); radGridView1.Rows.Add("E", "EE", "EEE"); radGridView1.Rows.Add("F", "FF", "FFF"); radGridView1.Rows.Add("G", "GG", "GGG"); radGridView1.RowValidating += new RowValidatingEventHandler(radGridView1_RowValidating); } void radGridView1_RowValidating(object sender, RowValidatingEventArgs e) { if (e.Row.Cells["B"].Value.ToString() == "BB") { e.Cancel = true; } } Steps to reproduce: 1. Go to cell with value "BB" 2. NOT in edit mode press down arrow key 2-3 times 3. Change text to "AA" 4. Press Tab several times Work around: Use custom navigator: radGridView1.GridViewElement.Navigator = new MyGridNavigator(); public class MyGridNavigator : BaseGridNavigator { private static readonly FieldInfo EnumeratorFieldInfo = typeof(BaseGridNavigator).GetField("enumerator", BindingFlags.NonPublic | BindingFlags.Instance); protected GridTraverser enumerator { get { return EnumeratorFieldInfo.GetValue(this) as GridTraverser; } } protected override bool SelectCore(GridViewRowInfo row, GridViewColumn column) { bool result = base.SelectCore(row, column); if (!result) { enumerator.GoToRow(this.GridViewElement.CurrentRow); } return result; } }
The RadGridView is bound to DataView Workaround: add row using the DataTable API: private void radButton1_Click(object sender, EventArgs e) { DataRow row = m_dvMat.Table.NewRow(); row["Active"] = true; row["Category"] = form.m_sString; m_dvMat.Table.Rows.Add(row); }
If you end edit of sorted decimal column by pressing ENTER key, the StackOverflowException is thrown.
RadGridView is throwing exception when loading layout that contains a GroupDescriptor with predefined Format with Aggregate function. Steps to reproduce: 1. Add GroupDescriptor: Dim descriptor As New GroupDescriptor descriptor.GroupNames.Add("column3", System.ComponentModel.ListSortDirection.Ascending) descriptor.Aggregates.Add("Sum(column3)") descriptor.Format = "{0}: {1} Total montant : {2:c2}" Me.RadGridView1.GroupDescriptors.Add(descriptor) 2. Save Layout 3. Load Layout
Presently it is not possible to persist customer created formatting objects in RadGridView.
1. Create a new project with RadGridView and bind it. 2. Add a GridViewComboBoxColumn and bind it to a generic list that contains KeyValuePair instancess. Set the key to be an enum and set the ValueMember property of the column to point to this field. 3. Run the project and try to filter by this column.
To reproduce: - Set BeginEditMod to BeginEditProgrammatically - Check/uncheck a check box cell and you will be able to edit the rest of the cells
The row's MaxHeight property does not affect the row sizing when the AutoSizeRows property of RadGridView is enabled. Workaround: Use the following data row: public class MyGridDataRowElement : GridDataRowElement { protected override Type ThemeEffectiveType { get { return typeof(GridDataRowElement); } } protected override System.Drawing.SizeF MeasureCore(System.Drawing.SizeF availableSize) { float maxHeight = this.RowInfo.MaxHeight; bool isAutoSize = this.GridViewElement.AutoSize && this.RowInfo.MaxHeight > 0 && availableSize.Height == float.PositiveInfinity; SizeF size = base.MeasureCore(availableSize); if (isAutoSize && size.Height > maxHeight) { availableSize.Height = maxHeight; size = base.MeasureCore(availableSize); } return size; } } here is how to replace it and set the max height: void radGridView1_RowFormatting(object sender, RowFormattingEventArgs e) { e.RowElement.RowInfo.MaxHeight = 32; } void radGridView1_CreateRow(object sender, GridViewCreateRowEventArgs e) { if (e.RowType == typeof(GridDataRowElement)) { e.RowType = typeof(MyGridDataRowElement); } }
1. Create new project with RadGridView and setup hierarchy with multiple tabs. 2. Run the project. 3. Open a child view tab and start editing a filter cell. 4. While the editor is open, change the active tab. 5. Repeat this operation several times. Workaround: the issue appears because RadGridView does not close its editor when changing the tab page and it thinks that it is still in edit mode when selecting the old page. You can work around the issue by using a custom cell element. Consider the code below: public class CustomDetailsCellElement : GridDetailViewCellElement { public CustomDetailsCellElement(GridViewColumn column, GridRowElement row) : base(column, row) { } protected override Type ThemeEffectiveType { get { return typeof(GridDetailViewCellElement); } } protected override RadPageViewElement CreatePageViewElement(IRadPageViewProvider pageViewProvider) { RadPageViewElement pageView = base.CreatePageViewElement(pageViewProvider); pageView.ItemSelecting += new EventHandler<RadPageViewItemSelectingEventArgs>(PageViewElement_ItemSelecting); return pageView; } void PageViewElement_ItemSelecting(object sender, RadPageViewItemSelectingEventArgs e) { if (this.IsInValidState(true) && this.GridControl != null && this.GridControl.IsInEditMode) { this.GridControl.EndEdit(); } } } You should handle also the CreateCell event in order to replace default child view cell in RadGridView: void gvReviewMigration_CreateCell(object sender, GridViewCreateCellEventArgs e) { if (e.CellType == typeof(GridDetailViewCellElement)) { e.CellType = typeof(CustomDetailsCellElement); } }