To reproduce: - Add ColumnGroupsViewDefinition and set ShowHeader to false. - Set AutoSizeRows to true. Workaround: Manually set the row height. ViewDefinition.ColumnGroups(0).Rows(0).MinHeight = 50
Use attached to reproduce:
- Just search for something and you will notice that the waiting bar does not disappear.
Workaround:
public RadForm1()
{
InitializeComponent();
radGridView1.MasterView.TableSearchRow.IsSearchAsync = false;
radGridView1.MasterView.TableSearchRow.SearchProgressChanged += TableSearchRow_SearchProgressChanged;
}
private void TableSearchRow_SearchProgressChanged(object sender, SearchProgressChangedEventArgs e)
{
var searchCell = radGridView1.TableElement.FindDescendant<GridSearchCellElement>();
if (searchCell != null)
{
var waitingBar = searchCell.Children[1] as RadWaitingBarElement;
waitingBar.StopWaiting();
waitingBar.Visibility = Telerik.WinControls.ElementVisibility.Collapsed;
}
}
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
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;
}
}
}
}
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
Workaround:
private void radGridView1_ConditionalFormattingFormShown(object sender, EventArgs e)
{
ConditionalFormattingForm f = sender as ConditionalFormattingForm;
if (f != null)
{
f.Width += 5;
}
}
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";
}
}
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);
}
}
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: 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: 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);
}
}
GridView is not correctly drawn if it's not populated and the theme is set to "TelerikMetro" or "TelerikMetroBlue" (the bottom line is missing).
Steps to reproduce the behavior: create a RadForm, add a RadGridView to it and set the theme to "TelerikMetro" or "TelerikMetroBlue" by using ThemeResolutionService.ApplicationThemeName.
June 19, 2019
I have implemented this and it is exactly what I want and need, Thank you!
However I thought I might point out that when you tab out it doesn't implement the search, only when you press enter.
And when you press the X to clear the search it clears the text box but not the search. the count of found and the highlighted finds remain
Using a custom control using the Telerik Presentation Framework, I am receiving a NullException inside the GridCheckBoxHeaderCellElement during the GridViewElement's data load.
The custom control construction follows an example I found somewhere (reference is lost to me at this point):
ControlContainingGridView inherits from RadControl
CreateChildItems creates and adds ControlContainingGridViewElement
ControlContainingGridViewElement inherits from RadElement
CreateChildItems creates and adds some layout controls AND a GridViewElement
public partial class ControlContainingGridView : RadControl {
public ControlContainingGridView() {
InitializeComponent();
this.TextChanged += ControlContainingGridView_TextChanged;
}
private void ControlContainingGridView_TextChanged(object sender, EventArgs e) {
controlContainingGridViewElement.Text = this.Text;
}
private ControlContainingGridViewElement controlContainingGridViewElement = null;
protected override void CreateChildItems(RadElement parent) {
controlContainingGridViewElement = new ControlContainingGridViewElement();
this.RootElement.Children.Add(controlContainingGridViewElement);
base.CreateChildItems(parent);
}
public object DataSource {
get {
return controlContainingGridViewElement.GridView.Template.DataSource;
}
set {
try {
controlContainingGridViewElement.GridView.Template.DataSource = value;
} catch (Exception ex) {
Debug.WriteLine(ex);
}
}
}
internal void SetupColumns(Action<MasterGridViewTemplate> setupColumns) {
controlContainingGridViewElement.GridView.Template.AutoGenerateColumns = false;
setupColumns(controlContainingGridViewElement.GridView.Template);
}
}
public class ControlContainingGridViewElement : RadElement {
private TextPrimitive textPrimitive = null;
private RadButtonElement addButton = null;
private RadButtonElement deleteButton = null;
private RadGridViewElement gridViewElement = null;
public RadGridViewElement GridView { get { return gridViewElement; } }
public bool ShowAddButton { get { return addButton.Visibility == ElementVisibility.Visible; } set { addButton.Visibility = value ? ElementVisibility.Visible : ElementVisibility.Collapsed; } }
public bool ShowDeleteButton { get { return deleteButton.Visibility == ElementVisibility.Visible; } set { deleteButton.Visibility = value ? ElementVisibility.Visible : ElementVisibility.Collapsed; } }
public string Text { get { return textPrimitive.Text; } set { textPrimitive.Text = value; } }
protected override void CreateChildElements() {
DockLayoutPanel dlp = new DockLayoutPanel();
dlp.StretchHorizontally = true;
dlp.StretchHorizontally = true;
dlp.LastChildFill = true;
DockLayoutPanel dlpBar = new DockLayoutPanel();
dlpBar.StretchHorizontally = true;
DockLayoutPanel.SetDock(dlpBar, Dock.Top);
var imagePrimitive = new ImagePrimitive();
DockLayoutPanel.SetDock(imagePrimitive, Dock.Left);
textPrimitive = new TextPrimitive();
DockLayoutPanel.SetDock(textPrimitive, Dock.Left);
var slp = new StackLayoutPanel();
DockLayoutPanel.SetDock(slp, Dock.Right);
var addButton = new RadButtonElement {
Text = "Add",
MaxSize = new Size() { Height = 20 }
};
var deleteButton = new RadButtonElement {
Text = "Del",
MaxSize = new Size() { Height = 20 }
};
slp.Children.Add(addButton);
slp.Children.Add(deleteButton);
dlpBar.Children.Add(slp);
dlpBar.Children.Add(imagePrimitive);
dlpBar.Children.Add(textPrimitive);
gridViewElement = new RadGridViewElement {
StretchHorizontally = true,
StretchVertically = true
};
gridViewElement.Template.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill;
gridViewElement.Template.AllowAddNewRow = false;
gridViewElement.Template.AllowDeleteRow = false;
gridViewElement.Template.AllowDragToGroup = false;
gridViewElement.ShowGroupPanel = false;
gridViewElement.ShowGroupPanelScrollbars = false;
dlp.Children.Add(dlpBar);
dlp.Children.Add(gridViewElement);
this.Children.Add(dlp);
base.CreateChildElements();
}
}
During Form load, I programmatically add columns and provide a binding source
private List<SampleModel> sampleModels = new List<SampleModel>();
private BindingSource sampleModelsBinding = new BindingSource();
private void RadForm1_Load(object sender, EventArgs e) {
sampleModels.Add(new SampleModel() {
When = DateTime.Parse("1980-04-23"),
SomeText = "Purple Bananas",
IsTrue = true
});
sampleModels.Add(new SampleModel() {
When = DateTime.Parse("2002-07-20"),
SomeText = "Ball & Chain",
IsTrue = false
});
sampleModelsBinding.DataSource = sampleModels;
controlContainingGridView.SetupColumns((grid) => {
grid.AddDateTimeColumn(nameof(SampleModel.When), "When");
grid.AddTextBoxColumn(nameof(SampleModel.SomeText), "Some Text");
grid.AddCheckBoxColumn(nameof(SampleModel.IsTrue), "Is True");
});
controlContainingGridView.DataSource = sampleModelsBinding;
}
Inclusion of the CheckBox column results in the following error:
Exception thrown: 'System.NullReferenceException' in Telerik.WinControls.GridView.dll
System.NullReferenceException: Object reference not set to an instance of an object.
at Telerik.WinControls.UI.GridCheckBoxHeaderCellElement.Attach(GridViewColumn data, Object context)
at Telerik.WinControls.UI.BaseVirtualizedContainer`1.InsertElement(Int32 position, IVirtualizedElement`1 element, T data)
at Telerik.WinControls.UI.BaseVirtualizedContainer`1.UpdateElement(Int32 position, T data)
at Telerik.WinControls.UI.BaseVirtualizedContainer`1.MeasureElements()
at Telerik.WinControls.UI.BaseVirtualizedContainer`1.MeasureOverride(SizeF availableSize)
at Telerik.WinControls.RadElement.MeasureCore(SizeF availableSize)
at Telerik.WinControls.RadElement.Measure(SizeF availableSize)
at Telerik.WinControls.UI.GridVirtualizedRowElement.MeasureElements(SizeF availableSize, SizeF clientSize, Padding borderThickness)
at Telerik.WinControls.UI.LightVisualElement.MeasureOverride(SizeF availableSize)
at Telerik.WinControls.UI.GridRowElement.MeasureOverride(SizeF availableSize)
at Telerik.WinControls.RadElement.MeasureCore(SizeF availableSize)
at Telerik.WinControls.RadElement.Measure(SizeF availableSize)
at Telerik.WinControls.UI.VirtualizedStackContainer`1.MeasureElementCore(RadElement element, SizeF availableSize)
at Telerik.WinControls.UI.ScrollableRowsContainerElement.MeasureElementCore(RadElement element, SizeF availableSize)
at Telerik.WinControls.UI.VirtualizedStackContainer`1.MeasureElement(IVirtualizedElement`1 element)
at Telerik.WinControls.UI.PinnedRowsContainerElement.MeasureElement(IVirtualizedElement`1 element)
at Telerik.WinControls.UI.BaseVirtualizedContainer`1.MeasureElements()
at Telerik.WinControls.UI.BaseVirtualizedContainer`1.MeasureOverride(SizeF availableSize)
at Telerik.WinControls.UI.ScrollableRowsContainerElement.MeasureOverride(SizeF availableSize)
at Telerik.WinControls.RadElement.MeasureCore(SizeF availableSize)
at Telerik.WinControls.RadElement.Measure(SizeF availableSize)
at Telerik.WinControls.UI.RowsContainerElement.MeasureOverride(SizeF availableSize)
at Telerik.WinControls.RadElement.MeasureCore(SizeF availableSize)
at Telerik.WinControls.RadElement.Measure(SizeF availableSize)
at Telerik.WinControls.UI.ScrollViewElement`1.MeasureViewElement(SizeF availableSize)
at Telerik.WinControls.UI.ScrollViewElement`1.MeasureView(SizeF availableSize)
at Telerik.WinControls.UI.ScrollViewElement`1.MeasureOverride(SizeF availableSize)
at Telerik.WinControls.UI.GridTableElement.MeasureOverride(SizeF availableSize)
at Telerik.WinControls.RadElement.MeasureCore(SizeF availableSize)
at Telerik.WinControls.RadElement.Measure(SizeF availableSize)
at Telerik.WinControls.Layouts.DockLayoutPanel.MeasureOverride(SizeF constraint)
at Telerik.WinControls.RadElement.MeasureCore(SizeF availableSize)
at Telerik.WinControls.RadElement.Measure(SizeF availableSize)
at Telerik.WinControls.Layouts.ContextLayoutManager.UpdateLayout()
at Telerik.WinControls.UI.GridVisibilityHelper.EnsureRowVisible(GridViewRowInfo rowInfo)
at Telerik.WinControls.UI.GridTableElement.EnsureRowVisible(GridViewRowInfo rowInfo)
at Telerik.WinControls.UI.GridTableElement.EnsureCellVisible(GridViewRowInfo rowInfo, GridViewColumn column)
at Telerik.WinControls.UI.GridTableElement.UpdateViewCore(Object sender, DataViewChangedEventArgs args)
at Telerik.WinControls.UI.GridTableElement.UpdateView(Object sender, DataViewChangedEventArgs args)
at Telerik.WinControls.UI.GridTableElement.ProcessTemplateEvent(GridViewEvent eventData)
at Telerik.WinControls.UI.GridTableElement.Telerik.WinControls.UI.IGridViewEventListener.ProcessEvent(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.RaiseCurrentChanged(GridViewTemplate template, GridViewRowInfo row, GridViewColumn column, Boolean user)
at Telerik.WinControls.UI.GridViewTemplate.CollectionView_CurrentChanged(Object sender, EventArgs e)
at System.EventHandler.Invoke(Object sender, EventArgs e)
at Telerik.WinControls.Data.RadCollectionView`1.OnCurrentChanged(EventArgs args)
at Telerik.WinControls.Data.RadCollectionView`1.SetCurrentPositionCore(Int32 newPosition, Boolean forceNotify, CurrentChangeReason reason)
at Telerik.WinControls.Data.RadListSource`1.InitializeCurrentItem()
at Telerik.WinControls.Data.RadListSource`1.Initialize()
at Telerik.WinControls.Data.RadListSource`1.Bind(Object dataSource, String dataMember)
at Telerik.WinControls.Data.RadListSource`1.set_DataSource(Object value)
at Telerik.WinControls.UI.GridViewTemplate.set_DataSource(Object value)
at BugReproduction.ControlContainingGridView.set_DataSource(Object value) in ...\BugReproduction\BugReproduction\ControlContainingGridView.cs:line 42
We have upgraded from WinControl UI 2010 to 2019 R2.
we have a lot of non-data bound radgridview that we process our data and add each row manually.
The radgridView.Rows.Add(rowdatacolumn1, rowdatacolumn2, rowdatacolumn3) used to return the row index of the added row. It is now returning -1 .
This is breaking a lot of our code.