Steps to reproduce:
When the grid is loaded and displayed, a NullReferenceException will be thrown:
Message : Object reference not set to an instance of an object. Type : System.NullReferenceException Source : Telerik.WinControls.GridView Stack trace : Telerik.WinControls.UI.BestFitHelper.SetColumnWidth(GridViewColumn column, Single desiredWidth) Telerik.WinControls.UI.BestFitHelper.BestFitColumnCore(GridViewColumn column, BestFitColumnMode mode) Telerik.WinControls.UI.BestFitHelper.ProcessRequests() Telerik.WinControls.UI.RowsContainerElement.MeasureOverride(SizeF availableSize) Telerik.WinControls.RadElement.MeasureCore(SizeF availableSize) Telerik.WinControls.RadElement.Measure(SizeF availableSize) Telerik.WinControls.UI.ScrollViewElement`1.MeasureViewElement(SizeF availableSize) Telerik.WinControls.UI.ScrollViewElement`1.MeasureView(SizeF availableSize) Telerik.WinControls.UI.ScrollViewElement`1.MeasureOverride(SizeF availableSize) Telerik.WinControls.UI.GridTableElement.MeasureOverride(SizeF availableSize) Telerik.WinControls.RadElement.MeasureCore(SizeF availableSize) Telerik.WinControls.RadElement.Measure(SizeF availableSize) Telerik.WinControls.Layouts.DockLayoutPanel.MeasureOverride(SizeF constraint) Telerik.WinControls.RadElement.MeasureCore(SizeF availableSize) Telerik.WinControls.RadElement.Measure(SizeF availableSize) Telerik.WinControls.UI.LightVisualElement.MeasureElements(SizeF availableSize, SizeF clientSize, Padding borderThickness) Telerik.WinControls.UI.LightVisualElement.MeasureOverride(SizeF availableSize) Telerik.WinControls.RadElement.MeasureCore(SizeF availableSize) Telerik.WinControls.RadElement.Measure(SizeF availableSize) Telerik.WinControls.RootRadElement.MeasureOverride(SizeF availableSize) Telerik.WinControls.RootRadElement.MeasureCore(SizeF availableSize) Telerik.WinControls.RadElement.Measure(SizeF availableSize) Telerik.WinControls.RadElementTree.PerformInnerLayout(Boolean performMeasure, Int32 x, Int32 y, Int32 width, Int32 height) Telerik.WinControls.RadControl.OnLoad(Size desiredSize) Telerik.WinControls.UI.RadGridView.OnLoad(Size desiredSize) Telerik.WinControls.RadControl.LoadElementTree(Size desiredSize) Telerik.WinControls.RadControl.OnCreateControl() System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible) System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible) System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible) System.Windows.Forms.Control.CreateControl() System.Windows.Forms.Control.SetVisibleCore(Boolean value) Telerik.WinControls.UI.TabPanel.set_Visible(Boolean value) Telerik.WinControls.UI.TabStripPanel.SetSelected(TabPanel tabPanel) Telerik.WinControls.UI.TabStripPanel.UpdateTabSelection(Boolean updateFocus) Telerik.WinControls.UI.Docking.DockTabStrip.UpdateTabSelection(Boolean updateFocus) Telerik.WinControls.UI.Docking.ToolTabStrip.UpdateTabSelection(Boolean updateFocus) Telerik.WinControls.UI.TabStripPanel.OnHandleCreated(EventArgs e) System.Windows.Forms.Control.WmCreate(Message& m) System.Windows.Forms.Control.WndProc(Message& m) System.Windows.Forms.ScrollableControl.WndProc(Message& m) Telerik.WinControls.RadControl.WndProc(Message& m) Telerik.WinControls.UI.SplitPanel.WndProc(Message& m) System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
Hi
I just found a strange issue using the latest bits of the Telerik RadGridView.
I have a grid that contains ColumnGroupsViewDefinition. Inside one of the group, one of the column is a GridViewComboBoxColumn.
The grid shows correctly on the screen.
If I try to export it using GridViewSpreadExport, I get an exception saying "input string was not in a correct format".
The export works fine if:
-I don't have groups
-I export to HTML using ExportToHTML
-I export to HTML using ExportToCSV
Any help please?
I have the following logic for my View, which has a RadGridView control (add to form at design-time).
GUI is a lightweight view, Controller does the heavy lifting. That part is all good.
However setting the column name and column autosize stuff is a little more "over-complicated" than I'd wish to see. It all works though.
Would be nice to have a "GridViewTextBoxColumnAttribute" as per below, for properties on Custom datasource objects to achieve the same thing in a more concise way.
Or am I missing something and there is a much easier way to do what I want?
I have a number of datasource classes: MyObject, MyCar, MyDog, MyWhatever... that ALL have different property names and datatypes, but may or may-not have the same column name or MasterTemplate style.
Also BestFitColumns is a function of the MasterTemplate, would be nice if it were a property for consistency sake (call to internal function encapsulated in the Set etc), as from a Telerik user's perspective it's just an enum. Then it would be setable in the SmartTag window as well, as functions can't be assigned to.
public partial class RadForm1 : Telerik.WinControls.UI.RadForm, IView
{
public RadForm1)
{
InitializeComponent();
}
private void RadForm1_Load(object sender, EventArgs e)
{
var x = new Controller();
x.SetTemplate(this);
}
public Telerik.WinControls.UI.RadGridView RadGridView()
{
return this.radGridView1;
}
}
public class Controller
{
public void SetTemplate(IView view)
{
var View_RadGrid = view.RadGridView();
View_RadGrid.MasterTemplate.AutoGenerateColumns = false;
View_RadGrid.MasterTemplate.AutoGenerateHierarchy = false;
View_RadGrid.MasterTemplate.AllowColumnResize = false;
View_RadGrid.MasterTemplate.BestFitColumns(Telerik.WinControls.UI.BestFitColumnMode.AllCells);
var cols = new List<Telerik.WinControls.UI.GridViewDataColumn>()
{
new Telerik.WinControls.UI.GridViewTextBoxColumn("DisplayName1"),
new Telerik.WinControls.UI.GridViewTextBoxColumn("DisplayName2")
};
View_RadGrid.MasterTemplate.Columns.AddRange(cols.ToArray());
View_RadGrid.DataSource = new List<MyObject>()
{
new MyObject() { DisplayName1 = "1", DisplayName2 = "2" },
new MyObject() { DisplayName1 = "3", DisplayName2 = "4" }
};
}
private class MyObject
{
[GridViewTextBoxColumnAttribute("DisplayName1", BestFitColumn = Telerik.WinControls.UI.BestFitColumnMode.AllCells, AllowColumnResize = false)]
public string DisplayName1 { get; set; }
[GridViewTextBoxColumnAttribute("DisplayName2", BestFitColumn = Telerik.WinControls.UI.BestFitColumnMode.AllCells, AllowColumnResize = false)]
public string DisplayName2 { get; set; }
}
}
public interface IView
{
Telerik.WinControls.UI.RadGridView RadGridView();
}
[System.AttributeUsage(System.AttributeTargets.Property)]
public class GridViewTextBoxColumnAttribute : System.Attribute
{
private string FieldName;
public Telerik.WinControls.UI.BestFitColumnMode BestFitColumn;
public bool AllowColumnResize;
public GridViewTextBoxColumnAttribute(string fieldName)
{
this.FieldName = fieldName;
}
}
To reproduce: the issue is reproducible in the Demo application >> GridView >> Tabbed Views. Follow the steps from the gif file. Workaround: private void radGridView1_ViewCellFormatting(object sender, CellFormattingEventArgs e) { GridDetailViewCellElement cell = e.CellElement as GridDetailViewCellElement; if (cell != null) { cell.MinSize = new Size(e.CellElement.Parent.Size.Width - this.radGridView1.TableElement.GroupIndent , 10); } }
This was working this way in 2017 then we changer it so all rows are affected. Bot modes should be supported.
To reproduce: please run the attached sample project and follow the steps illustrated in the attached gif file: Scrolling to a newly added row does not work when inner templates are visible. Add data to the inner templates of several rows near the bottom using the button. Expand these inner templates so they are all visible. Scroll back up to the top. Add a new item to the outer grid normally. The table will jump to where it things the new item is but will fall short, instead scrolling to a location in one of the inner templates. Workaround: private void RadGridView1_UserAddedRow(object sender, GridViewRowEventArgs e) { foreach (GridViewRowInfo row in this.radGridView1.Rows) { if (row.IsExpanded) { row.IsExpanded = false; row.IsExpanded = true; } } }
To reproduce: Initially, the row at index 0 is white, when you move it to index 5 it is still white until you hover it: public RadForm1() { InitializeComponent(); this.radGridView1.Columns.Add("Data"); for (int i = 0; i < 100; i++) { this.radGridView1.Rows.Add(i); } this.radGridView1.EnableAlternatingRowColor = true; this.radGridView1.TableElement.AlternatingRowColor = Color.Aqua; } private void radButton1_Click(object sender, EventArgs e) { this.radGridView1.Rows.Move(0, 5); } Workaround: private void radButton1_Click(object sender, EventArgs e) { this.radGridView1.Rows.Move(0, 5); this.radGridView1.Rows[5].InvalidateRow(); }
How to reproduce: 1. Click DrugName Filter Icon. 2. Uncheck Combivent 3. OK 4. Click name Filter Icon 5. Uncheck Christoff 6. OK 7. Click DrugName Filter Icon 8. Uncheck Dilantin 9. OK In this scenario the grid should display only 2 rows but it displays 3. public partial class RadForm1 : Telerik.WinControls.UI.RadForm { public List<Drug> DrugList { get; set; } public RadForm1() { InitializeComponent(); DrugList = new List<Drug>(); LoadDrugList(); radGridView1.DataSource = DrugList; radGridView1.EnableFiltering = true; this.radGridView1.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill; this.radGridView1.MultiSelect = true; } protected override void OnLoad(EventArgs e) { base.OnLoad(e); radGridView1.MasterTemplate.ShowFilteringRow = false; radGridView1.MasterTemplate.ShowHeaderCellButtons = true; } void LoadDrugList() { DrugList.Add(new Drug { Dosage = 25, DrugName = "Indocin", Name = "David"}); DrugList.Add(new Drug { Dosage = 50, DrugName = "Enebrel", Name = "Sam" }); DrugList.Add(new Drug { Dosage = 10, DrugName = "Hydralazine", Name = "Christoff"}); DrugList.Add(new Drug { Dosage = 21, DrugName = "Combivent", Name = "Janet"}); DrugList.Add(new Drug { Dosage = 100, DrugName = "Dilantin", Name = "Melanie"}); } } Workaround: use a custom filter popup public partial class RadForm1 : Telerik.WinControls.UI.RadForm { public List<Drug> DrugList { get; set; } public RadForm1() { InitializeComponent(); DrugList = new List<Drug>(); LoadDrugList(); radGridView1.DataSource = DrugList; radGridView1.EnableFiltering = true; this.radGridView1.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill; this.radGridView1.MultiSelect = true; this.radGridView1.FilterPopupRequired += RadGridView1_FilterPopupRequired; } private void RadGridView1_FilterPopupRequired(object sender, FilterPopupRequiredEventArgs e) { e.FilterPopup = new CustomRadListFilterPopup(e.Column); } protected override void OnLoad(EventArgs e) { base.OnLoad(e); radGridView1.MasterTemplate.ShowFilteringRow = false; radGridView1.MasterTemplate.ShowHeaderCellButtons = true; } void LoadDrugList() { DrugList.Add(new Drug { Dosage = 25, DrugName = "Indocin", Name = "David"}); DrugList.Add(new Drug { Dosage = 50, DrugName = "Enebrel", Name = "Sam" }); DrugList.Add(new Drug { Dosage = 10, DrugName = "Hydralazine", Name = "Christoff"}); DrugList.Add(new Drug { Dosage = 21, DrugName = "Combivent", Name = "Janet"}); DrugList.Add(new Drug { Dosage = 100, DrugName = "Dilantin", Name = "Melanie"}); } } public class CustomRadListFilterPopup : RadListFilterPopup { public CustomRadListFilterPopup(GridViewDataColumn dataColumn) : base(dataColumn) { } protected override void OnButtonOkClick(EventArgs e) { FilterMenuTreeItem treeMenuItem = this.Items.FirstOrDefault(i => i is FilterMenuTreeItem) as FilterMenuTreeItem; if (treeMenuItem == null) { base.OnButtonOkClick(e); } FilterMenuTreeElement listFilterElement = treeMenuItem.TreeElement; FilterOperator filterOperator = FilterOperator.IsEqualTo; switch (listFilterElement.SelectedMode) { case ListFilterSelectedMode.All: filterOperator = FilterOperator.None; break; case ListFilterSelectedMode.Null: filterOperator = FilterOperator.IsNull; break; case ListFilterSelectedMode.NotNull: filterOperator = FilterOperator.IsNotNull; break; } if (filterOperator != FilterOperator.IsEqualTo) { SetFilterOperator(filterOperator); this.ClosePopup(RadPopupCloseReason.CloseCalled); } else { CompositeFilterDescriptor compositeFilterDescriptor = new CompositeFilterDescriptor(); compositeFilterDescriptor.PropertyName = this.DataColumn.Name; RadListFilterDistinctValuesTable distinctValues = this.GetDistinctValuesTable(); string blanksKey = RadGridLocalizationProvider.CurrentProvider.GetLocalizedString(RadGridStringId.FilterMenuBlanks); bool blanks = listFilterElement.SelectedValues.Contains(blanksKey); compositeFilterDescriptor.LogicalOperator = FilterLogicalOperator.And; foreach (DictionaryEntry entry in distinctValues) { object key = entry.Key; if (string.IsNullOrEmpty(Convert.ToString(key))) { key = blanksKey; } if (this.DataColumn is GridViewDateTimeColumn || this.DataColumn.DataType == typeof(DateTime) || this.DataColumn.DataType == typeof(DateTime?)) { DateTime dateTime; if (DateTime.TryParse(key.ToString(), out dateTime)) { object dataKey; if (RadDataConverter.Instance.TryFormat(treeMenuItem.TreeElement.GroupedDateValues ? dateTime.Date : dateTime, typeof(string), this.DataColumn, out dataKey) == null) { key = dataKey; } } } if (!listFilterElement.SelectedValues.Contains(key)) { foreach (object value in (ArrayList)entry.Value) { FilterDescriptor descriptor; if (value == DBNull.Value) { descriptor = new FilterDescriptor(this.DataColumn.Name, FilterOperator.IsNotEqualTo, null); } else if (this.DataColumn is GridViewDateTimeColumn || this.DataColumn.DataType == typeof(DateTime) || this.DataColumn.DataType == typeof(DateTime?)) { descriptor = new DateFilterDescriptor(this.DataColumn.Name, FilterOperator.IsNotEqualTo, (DateTime?)value, false); } else { descriptor = new FilterDescriptor(this.DataColumn.Name, FilterOperator.IsNotEqualTo, value); } compositeFilterDescriptor.FilterDescriptors.Add(descriptor); } } } if (this.DataColumn.FilterDescriptor != null) { CompositeFilterDescriptor compositeFilter = this.DataColumn.FilterDescriptor as CompositeFilterDescriptor; if (compositeFilter != null) { foreach (var item in compositeFilter.FilterDescriptors) { if (listFilterElement.SelectedValues.Contains(item.Value)) { continue; } FilterDescriptor descriptor = new FilterDescriptor(this.DataColumn.Name, FilterOperator.IsNotEqualTo, item.Value); compositeFilterDescriptor.FilterDescriptors.Add(descriptor); } } else if(!listFilterElement.SelectedValues.Contains(this.DataColumn.FilterDescriptor.Value)) { FilterDescriptor descriptor = new FilterDescriptor(this.DataColumn.Name, FilterOperator.IsNotEqualTo, this.DataColumn.FilterDescriptor.Value); compositeFilterDescriptor.FilterDescriptors.Add(descriptor); } } this.FilterDescriptor = compositeFilterDescriptor; OnFilterConfirmed(); } } }
To reproduce: use the following code snippet: Sub New() InitializeComponent() Dim view As New ColumnGroupsViewDefinition() view.ColumnGroups.Add(New GridViewColumnGroup("Customer Contact")) view.ColumnGroups.Add(New GridViewColumnGroup("Details")) view.ColumnGroups(1).Groups.Add(New GridViewColumnGroup("Address")) view.ColumnGroups(1).Groups.Add(New GridViewColumnGroup("Contact")) view.ColumnGroups(0).Rows.Add(New GridViewColumnGroupRow()) view.ColumnGroups(0).Rows(0).ColumnNames.Add("CompanyName") view.ColumnGroups(0).Rows(0).ColumnNames.Add("ContactName") view.ColumnGroups(0).Rows(0).ColumnNames.Add("ContactTitle") view.ColumnGroups(1).Groups(0).Rows.Add(New GridViewColumnGroupRow()) view.ColumnGroups(1).Groups(0).Rows(0).ColumnNames.Add("Address") view.ColumnGroups(1).Groups(0).Rows(0).ColumnNames.Add("City") view.ColumnGroups(1).Groups(0).Rows(0).ColumnNames.Add("Country") view.ColumnGroups(1).Groups(1).Rows.Add(New GridViewColumnGroupRow()) view.ColumnGroups(1).Groups(1).Rows(0).ColumnNames.Add("Phone") view.ColumnGroups(1).Groups(1).Rows(0).ColumnNames.Add("Fax") RadGridView1.ViewDefinition = view End Sub Private Sub RadForm1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Me.CustomersTableAdapter.Fill(Me.NwindDataSet.Customers) Me.RadGridView1.BestFitColumns(BestFitColumnMode.AllCells) RadGridView1.Columns("Fax").IsVisible = False RadGridView1.Columns("Phone").IsVisible = False Dim spreadExporter As GridViewSpreadExport = New GridViewSpreadExport(Me.RadGridView1) Dim exportRenderer As New SpreadExportRenderer() spreadExporter.HiddenColumnOption = Export.HiddenOption.ExportAsHidden spreadExporter.FreezeHeaderRow = True spreadExporter.ExportGroupedColumns = True spreadExporter.ExportChildRowsGrouped = True spreadExporter.ExportVisualSettings = True spreadExporter.ExportHierarchy = True spreadExporter.ExportViewDefinition = True spreadExporter.ExportFormat = SpreadExportFormat.Xlsx Dim fileName = "..\..\export" & DateTime.Now.ToLongTimeString().Replace(":", "_") & ".xlsx" spreadExporter.RunExport(fileName, exportRenderer) Process.Start(fileName) End Sub Workaround: instead of hiding all the columns inside a group, hide the entire group: Sub New() InitializeComponent() Dim view As New ColumnGroupsViewDefinition() view.ColumnGroups.Add(New GridViewColumnGroup("Customer Contact")) view.ColumnGroups.Add(New GridViewColumnGroup("Details")) view.ColumnGroups(1).Groups.Add(New GridViewColumnGroup("Address")) view.ColumnGroups(1).Groups.Add(New GridViewColumnGroup("Contact")) view.ColumnGroups(0).Rows.Add(New GridViewColumnGroupRow()) view.ColumnGroups(0).Rows(0).ColumnNames.Add("CompanyName") view.ColumnGroups(0).Rows(0).ColumnNames.Add("ContactName") view.ColumnGroups(0).Rows(0).ColumnNames.Add("ContactTitle") view.ColumnGroups(1).Groups(0).Rows.Add(New GridViewColumnGroupRow()) view.ColumnGroups(1).Groups(0).Rows(0).ColumnNames.Add("Address") view.ColumnGroups(1).Groups(0).Rows(0).ColumnNames.Add("City") view.ColumnGroups(1).Groups(0).Rows(0).ColumnNames.Add("Country") view.ColumnGroups(1).Groups(1).Rows.Add(New GridViewColumnGroupRow()) view.ColumnGroups(1).Groups(1).Rows(0).ColumnNames.Add("Phone") view.ColumnGroups(1).Groups(1).Rows(0).ColumnNames.Add("Fax") RadGridView1.ViewDefinition = view view.ColumnGroups(1).Groups.Last().IsVisible=False End Sub
To reproduce: change the decimal separator to ",". Please refer to the attached sample project and follow the steps from the attached gif file. Workaround: change the CurrentCulture in your application in order to affect the decimal separator: Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-GB");
To reproduce: - Add a checkbox column and hide some of the cells. - Change some values and then click on empty cell. - Exception occurs in OnMouseDownLeft method (GridRowBeahvior class) Workaround: Hide the checkbox only.
To reproduce: - Use a column with numbers stored as strings. - Set the data type to decimal - The columns should be sorted according to the number value not alphabetically. Workaround: var col = new GridViewTextBoxColumn(); col.DataTypeConverter = new DecimalConverter(); col.FieldName = "Dosage"; col.UseDataTypeConverterWhenSorting = true; col.DataType = typeof(decimal); radGridView1.Columns.Add(col); public class DecimalConverter : TypeConverter { public override bool CanConvertTo(ITypeDescriptorContext context, Type destination_type) { if (destination_type == typeof(decimal)) { return true; } return base.CanConvertTo(context, destination_type); } public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destination_type) { if (destination_type == typeof(decimal)) { return decimal.Parse(value.ToString()); } return base.ConvertTo(context, culture, value, destination_type); } }
To reproduce: please refer to the attached sample project and follow the steps from the attached gif file. 1. Run the project and type "hana" in the second filter cell. You will notice that after a few seconds the input is handled and the grid is filtered. Workaround: use RadVirtualGrid instead. https://docs.telerik.com/devtools/winforms/virtualgrid/overview https://docs.telerik.com/devtools/winforms/virtualgrid/filtering/filtering Second workaround: https://docs.telerik.com/devtools/winforms/gridview/filtering/how-to/filter-on-enter
Workaround: private void radGridView1_ConditionalFormattingFormShown(object sender, EventArgs e) { ConditionalFormattingForm f = sender as ConditionalFormattingForm; if (f != null) { RadPropertyGrid radPropertyGridProperties = f.Controls["radPropertyGridProperties"] as RadPropertyGrid; radPropertyGridProperties.ItemFormatting += radPropertyGridProperties_ItemFormatting; radPropertyGridProperties.ItemFormatting += radPropertyGridProperties_ItemFormatting; } } private void radPropertyGridProperties_ItemFormatting(object sender, PropertyGridItemFormattingEventArgs e) { if (e.Item.Label=="CellFont") { e.Item.Label = "aaa"; } }
Workaround: private void radGridView1_ConditionalFormattingFormShown(object sender, EventArgs e) { ConditionalFormattingForm f = sender as ConditionalFormattingForm; if (f != null) { f.Width += 5; } }
This can be used for large amounts of data. Check this - https://docs.telerik.com/devtools/document-processing/libraries/radpdfprocessing/formats-and-conversion/pdf/pdfstreamwriter/pdfstreamwriter
To reproduce: 1. Add a RadMultiColumnComboBox and populate it with data. 2. Set the DropDownStyle property of the control to DropDownList 3. Set the EditorControl.AllowSearchRow and the AutoSizeDropDownToBestFit properties to true . 4. When you open the drop down and try to use the search row (e.g. clicking over the arrow buttons), the drop down is closed. Workaround: public partial class RadForm1 : Telerik.WinControls.UI.RadForm { public RadForm1() { InitializeComponent(); this.radMultiColumnComboBox1.EditorControl.AllowSearchRow = true; this.radMultiColumnComboBox1.DropDownStyle = Telerik.WinControls.RadDropDownStyle.DropDownList; this.radMultiColumnComboBox1.DropDownClosing += RadMultiColumnComboBox1_DropDownClosing; } private void RadMultiColumnComboBox1_DropDownClosing(object sender, RadPopupClosingEventArgs args) { Point position = this.radMultiColumnComboBox1.EditorControl.PointToClient(Cursor.Position); Telerik.WinControls.RadElement searchElement = this.radMultiColumnComboBox1.EditorControl.ElementTree.GetElementAtPoint(position); if (searchElement != null) { GridSearchCellElement parent = searchElement.FindAncestor<GridSearchCellElement>(); if (parent != null) { args.Cancel = true; } } } }
A possible workaround is to use the following KB and change how it is implemented to iterate the MasterTemplate.Rows collection instead of the ViewInfo.Rows collection https://www.telerik.com/support/kb/winforms/gridview/details/add-check-all-in-the-header-cell-for-a-gridviewcheckboxcolumn