i would like to customize the grid like below attached screen shot,is it possible using telerik win forms (rad grid view), if possible can you please send me sample code for that, if not possible can you suggest me alternate solution for this requirement.
Currently if a user hits the decimal separator key the grid opens a cell for edit and selects its content. If the user does not notice this he may enter 1 instead of 0.1
To reproduce: -Try to format the cell value by using html in the HTMLCellFormatting event. Resolution: You should set the ExcapeHTMLChars property of the CellElement to false in order to format the content of the cell with HTML tags. This can be done in the HTMLCellFormatting event handler of the exporter.
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; } }
To reproduce: use the code from our demo application for Custom Filtering. Instead of Customers table, bind the grid to Orders or another table with 1000+ rows. Resolution: You can surround the row operation in Begin/EndUpdate(false) and remove the InvalidateRow method. The Custom Filtering example in our demo Application is updated for better performance or you can use the following code snippet: For example: private void radGridView1_CustomFiltering(object sender, Telerik.WinControls.UI.GridViewCustomFilteringEventArgs e) { if (string.IsNullOrEmpty(this.radTextBox1.Text)) { this.radGridView1.BeginUpdate(); e.Visible = true; for (int i = 0; i < this.radGridView1.ColumnCount; i++) { e.Row.Cells[i].Style.Reset(); } //e.Row.InvalidateRow(); this.radGridView1.EndUpdate(false); return; } this.radGridView1.BeginUpdate(); e.Visible = false; for (int i = 0; i < this.radGridView1.ColumnCount; i++) { string text = e.Row.Cells[i].Value.ToString(); if (text.IndexOf(this.radTextBox1.Text, 0, StringComparison.InvariantCultureIgnoreCase) >= 0) { e.Visible = true; e.Row.Cells[i].Style.CustomizeFill = true; e.Row.Cells[i].Style.DrawFill = true; e.Row.Cells[i].Style.BackColor = Color.FromArgb(201, 252, 254); } else { e.Row.Cells[i].Style.Reset(); } } //e.Row.InvalidateRow(); this.radGridView1.EndUpdate(false); }
To reproduce: Download the attached project, run it and try to filter the bottom grid. You will see the exception Workaround: Use the following custom RadGridView: public class MyGrid : RadGridView { protected override RadGridViewElement CreateGridViewElement() { return new MyGridElement(); } } public class MyGridElement : RadGridViewElement { protected override MasterGridViewTemplate CreateTemplate() { return new MyMasterTemplate(); } protected override Type ThemeEffectiveType { get { return typeof(RadGridViewElement); } } } public class MyMasterTemplate : MasterGridViewTemplate { private MyEventDispatcher dispatcher = new MyEventDispatcher(); public override EventDispatcher EventDispatcher { get { return this.dispatcher; } } } public class MyEventDispatcher : EventDispatcher { public override void RaiseEvent<T>(object eventKey, object sender, T args) { GridViewCellEventArgs cellArgs = args as GridViewCellEventArgs; if (cellArgs != null && cellArgs.Column == null && cellArgs.Row == null) { typeof(GridViewCellEventArgsBase) .GetField("column", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic) .SetValue(cellArgs, new GridViewTextBoxColumn()); typeof(GridViewCellEventArgsBase) .GetField("row", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic) .SetValue(cellArgs, new GridViewDataRowInfo(null)); } base.RaiseEvent<T>(eventKey, sender, args); } }
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(); BindingSource bs1 = new BindingSource(); BindingSource bs2 = new BindingSource(); DataTable dt1 = new DataTable(); dt1.Columns.Add("MortgageId", typeof(string)); dt1.Columns.Add("MortgageNo", typeof(string)); for (int i = 0; i < 50; i++) { dt1.Rows.Add(i, Guid.NewGuid().ToString().Substring(0, 5)); } bs1.DataSource = dt1; DataTable dt2 = new DataTable(); dt2.Columns.Add("PaymentCode", typeof(string)); dt2.Columns.Add("Description", typeof(string)); for (int i = 0; i < 50; i++) { dt2.Rows.Add(Guid.NewGuid().ToString().Substring(0, 5), Guid.NewGuid().ToString().Substring(0, 5)); } bs2.DataSource = dt2; GridViewMultiComboBoxColumn col1 = new GridViewMultiComboBoxColumn("MortgageId"); col1.DataSource = bs1; col1.FieldName = "MortgageId"; col1.DisplayMember = "MortgageId"; col1.ValueMember = "MortgageId"; col1.Width = 70; this.radGridView1.Columns.Add(col1); col1 = new GridViewMultiComboBoxColumn("PaymentCode"); col1.DataSource = bs2; col1.DisplayMember = "PaymentCode"; col1.ValueMember = "PaymentCode"; col1.FieldName = "PaymentCode"; col1.Width = 70; this.radGridView1.Columns.Add(col1); this.radGridView1.CellEditorInitialized += radGridView1_CellEditorInitialized; } private void radGridView1_CellEditorInitialized(object sender, Telerik.WinControls.UI.GridViewCellEventArgs e) { if (e.Column.Name == "MortgageId") { RadMultiColumnComboBoxElement editor = e.ActiveEditor as RadMultiColumnComboBoxElement; if (editor != null) { editor.EditorControl.FilterDescriptors.Clear(); editor.EditorControl.Columns.Clear(); editor.EditorControl.MasterTemplate.AutoGenerateColumns = false; editor.EditorControl.Columns.Add(new GridViewTextBoxColumn("MortgageId")); editor.EditorControl.Columns.Add(new GridViewTextBoxColumn("MortgageNo")); editor.DropDownWidth = 200; } return; } if (e.Column.Name == "PaymentCode") { RadMultiColumnComboBoxElement editor = e.ActiveEditor as RadMultiColumnComboBoxElement; if (editor != null) { editor.EditorControl.FilterDescriptors.Clear(); editor.EditorControl.Columns.Clear(); editor.EditorControl.MasterTemplate.AutoGenerateColumns = false; editor.EditorControl.Columns.Add(new GridViewTextBoxColumn("PaymentCode")); editor.EditorControl.Columns.Add(new GridViewTextBoxColumn("Description")); editor.DropDownWidth = 200; } return; } } Workaround: do not set the RadMultiColumnComboBoxElement.EditorControl.MasterTemplate.AutoGenerateColumns property to false in the CellEditorInitialized event .
Workaround: RadDragDropService dragDropService; int scrollValue = 0; public Form1() { InitializeComponent(); dragDropService = this.leftGrid.GridViewElement.GetService<RadDragDropService>(); dragDropService.Started += dragDropService_Started; leftGrid.TableElement.VScrollBar.ValueChanged += VScrollBar_ValueChanged; } private void dragDropService_Started(object sender, EventArgs e) { scrollValue = this.leftGrid.TableElement.VScrollBar.Value; } private void VScrollBar_ValueChanged(object sender, EventArgs e) { if (dragDropService != null && dragDropService.State == RadServiceState.Working) { this.leftGrid.TableElement.VScrollBar.Value = scrollValue; } } Resolution: Added AllowAutoScrollColumnsWhileDragging and AllowAutoScrollRowsWhileDragging properties of RadGridViewDragDropService: RadGridViewDragDropService svc = this.GridViewElement.GetService<RadGridViewDragDropService>(); svc.AllowAutoScrollColumnsWhileDragging = false; svc.AllowAutoScrollRowsWhileDragging = false; svc.Start(row);
RadGridView issue: Can not change the Operator or Value of FilterDescriptor in FilterChanging event handler
It is related to GridViewCalculatorColumn, GridViewBrowseColumn. Workaround: use a custom row behavior and override the ProcessAlphaNumericKey method to initialize the editor with the respective value. http://www.telerik.com/help/winforms/gridview-rows-row-behaviors.html
When current cell is checked (CheckBoxColumn) and the user scrolls one time with the mouse wheel there is a blank space below the grid.
To reproduce: - Add several rows to a grid where the paging is enabled (make sure that last row has unique values) - Use the excel like filtering in the first page, notice that the last value is missing. Workaround: void radGridView1_FilterPopupInitialized(object sender, FilterPopupInitializedEventArgs e) { RadListFilterPopup popup = e.FilterPopup as RadListFilterPopup; if (popup != null) { foreach (GridViewRowInfo row in radGridView1.Rows) { var value = row.Cells[e.Column.Name].Value; if (!(popup.MenuTreeElement.DistinctListValues.Contains(value))) { popup.MenuTreeElement.DistinctListValues.Add(value.ToString(), value.ToString()) ; } } } }
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("Duration", typeof(TimeSpan)); for (int i = 0; i < 20; i++) { dt.Rows.Add(i, "Item" + i, TimeSpan.FromMinutes(i * 10)); } this.radGridView1.DataSource = dt; this.radGridView1.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill; this.radGridView1.EnableFiltering = true; this.radGridView1.ShowHeaderCellButtons = true; Try to filter via the Excel-Like filtering functionality. Workaround: use dt.Columns.Add("Duration", typeof(string)); instead of dt.Columns.Add("Duration", typeof(TimeSpan));
To reproduce: public Form1() { InitializeComponent(); List<DiffItem> diffItemsMain = GetSampleDataDiffItems(12500); radGridView1.DataSource = diffItemsMain; radGridView1.Relations.AddSelfReference(radGridView1.MasterTemplate, "Index", "ParentIndex"); radGridView1.MasterTemplate.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill; } private List<DiffItem> GetSampleDataDiffItems(int rootInstances) { List<DiffItem> diffItems = new List<DiffItem>(); for (int j = 0; j < rootInstances; j++) { string[,] sampleData = GetSampleDataArray(); string parentIndex = ""; for (int i = 0; i <= sampleData.GetUpperBound(0); i++) { DiffItem diffItem = new DiffItem(Guid.NewGuid().ToString()); diffItem.ObjectStatus = sampleData[i, 0]; diffItem.ObjectType = sampleData[i, 1]; diffItem.ObjectLabel = sampleData[i, 2]; diffItem.ChangeType = sampleData[i, 3]; diffItem.ObjectAccepted = sampleData[i, 4]; diffItem.ParentIndex = parentIndex; diffItems.Add(diffItem); parentIndex = diffItem.Index; } } return diffItems; } private string[,] GetSampleDataArray() { string[,] sampleData = new string[,] { { "New", "Parent", "A572", "Added", "Undecided" }, { "New", "Child", "CM1", "Added", "Undecided" }, { "Modified", "GrandChild", "A573", "Modified", "Undecided" }, { "Modified", "GreatGrandChild", "CM2", "Modified", "Undecided" } }; return sampleData; } public class DiffItem { public DiffItem(string index) { Index = index; } public string ObjectStatus { get; set; } public string Index { get; set; } public bool ObjectSelected { get; set; } public string ObjectType { get; set; } public string ObjectLabel { get; set; } public string ChangeType { get; set; } public string ObjectAccepted { get; set; } public string ParentIndex { get; set; } } Try to edit one random cell. You will notice that after pressing the Enter key to commit the changes, the editor is closed after a few seconds. Resolution: The slowdown should be experienced only when editing columns which participate in the self-reference relation.
To reproduce: Populate a RadGridView with the following data: DataTable vMain = new DataTable("Details"); vMain.Columns.Add("OutServiceDateGuid", typeof(Guid)); vMain.Columns.Add("預估金額", typeof(string)); vMain.Columns.Add("織造", typeof(bool)); vMain.Columns.Add("狀態", typeof(string)); vMain.Columns.Add("委託廠商", typeof(string)); vMain.Columns.Add("工服單", typeof(string)); vMain.Columns.Add("申請日", typeof(DateTime)); for (int i = 0; i < 40; i++) { vMain.Rows.Add("50ED1E91-868C-42AC-9CA9-00A56F78C3" + i.ToString("0#") ,i.ToString(), true,"", "中心", "103LMH4"+i.ToString(), "2014-10-24 13:04:16.367"); } radGridView1.DataSource = vMain; radGridView1.Columns["OutServiceDateGuid"].IsVisible = false; radGridView1.Columns["申請日"].FormatString = "{0:yyyy/MM/dd}"; radGridView1.Columns["預估金額"].FormatString = "{0:C}"; radGridView1.Columns["狀態"].MaxWidth = 70; // this.radGridView1.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill; //this.radGridView1.BestFitColumns(BestFitColumnMode.AllCells); // this.radGridView1.MasterTemplate.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill; DataTable vWoven = new DataTable("vWoven"); vWoven.Columns.Add("OutServiceDateGuid", typeof(Guid)); vWoven.Columns.Add("NameOrColor", typeof(string)); vWoven.Columns.Add("Qty", typeof(string)); vWoven.Columns.Add("QtyUnitName", typeof(string)); vWoven.Columns.Add("Weight", typeof(string)); vWoven.Columns.Add("SumPrice", typeof(string)); for (int i = 0; i < 40; i++) { vWoven.Rows.Add("50ED1E91-868C-42AC-9CA9-00A56F78C3" + (i + 1).ToString("0#"), " vWoven中心" + i.ToString(), i, i, i); } GridViewTemplate template1 = new GridViewTemplate(); template1.Caption = "織造"; template1.DataSource = vWoven; template1.Columns["OutServiceDateGuid"].IsVisible = false; template1.Columns["NameOrColor"].HeaderText = "成品名與規格"; template1.Columns["Qty"].HeaderText = "數量"; template1.Columns["QtyUnitName"].HeaderText = "單位"; template1.Columns["Weight"].HeaderText = "重量"; template1.Columns["SumPrice"].HeaderText = "金額"; //template1.BestFitColumns(BestFitColumnMode.AllCells); template1.AllowRowResize = false; template1.ShowColumnHeaders = true; template1.ShowRowHeaderColumn = true; template1.AllowAddNewRow = false; template1.AllowDeleteRow = false; template1.AllowDragToGroup = false; this.radGridView1.Templates.Add(template1); GridViewRelation relation1 = new GridViewRelation(this.radGridView1.MasterTemplate); relation1.ChildTemplate = template1; relation1.ParentColumnNames.Add("OutServiceDateGuid"); relation1.ChildColumnNames.Add("OutServiceDateGuid"); this.radGridView1.Relations.Add(relation1); DataTable vDye = new DataTable("vDye"); vDye.Columns.Add("OutServiceDateGuid", typeof(Guid)); vDye.Columns.Add("NameOrColor", typeof(string)); vDye.Columns.Add("ColorNo", typeof(string)); vDye.Columns.Add("Qty", typeof(string)); vDye.Columns.Add("QtyUnitName", typeof(string)); vDye.Columns.Add("Weight", typeof(string)); vDye.Columns.Add("SumPrice", typeof(string)); for (int i = 0; i < 20; i++) { vDye.Rows.Add("50ED1E91-868C-42AC-9CA9-00A56F78C3" + (i + 1).ToString("0#"), " vDye中心" + i.ToString(),"", i, i, i); } GridViewTemplate template2 = new GridViewTemplate(); template2.Caption = "染整"; template2.DataSource = vDye; template2.Columns["OutServiceDateGuid"].IsVisible = false; template2.Columns["NameOrColor"].HeaderText = "顏色"; template2.Columns["ColorNo"].HeaderText = "色號"; template2.Columns["Qty"].HeaderText = "數量"; template2.Columns["QtyUnitName"].HeaderText = "單位"; template2.Columns["Weight"].HeaderText = "重量"; template2.Columns["SumPrice"].HeaderText = "金額"; //template2.BestFitColumns(BestFitColumnMode.AllCells); template2.AllowAddNewRow = false; template2.AllowRowResize = false; template2.ShowColumnHeaders = true; template2.ShowRowHeaderColumn = true; template2.AllowDeleteRow = false; template2.AllowDragToGroup = false; this.radGridView1.Templates.Add(template2); GridViewRelation relation2 = new GridViewRelation(this.radGridView1.MasterTemplate); relation2.ChildTemplate = template2; relation2.ParentColumnNames.Add("OutServiceDateGuid"); relation2.ChildColumnNames.Add("OutServiceDateGuid"); this.radGridView1.Relations.Add(relation2); DataTable vAppoint = new DataTable("vAppoint"); vAppoint.Columns.Add("OutServiceDateGuid", typeof(Guid)); vAppoint.Columns.Add("NameOrColor", typeof(string)); vAppoint.Columns.Add("Qty", typeof(string)); vAppoint.Columns.Add("QtyUnitName", typeof(string)); vAppoint.Columns.Add("Weight", typeof(string)); vAppoint.Columns.Add("SumPrice", typeof(string)); for (int i = 0; i < 20; i++) { vAppoint.Rows.Add("50ED1E91-868C-42AC-9CA9-00A56F78C3" + (i + 2).ToString("0#"), "vAppoint中心" + i.ToString(), i, i, i); } GridViewTemplate template3 = new GridViewTemplate(); template3.Caption = "委外"; template3.DataSource = vAppoint; template3.Columns["OutServiceDateGuid"].IsVisible = false; template3.Columns["NameOrColor"].HeaderText = "委外內容"; template3.Columns["SumPrice"].HeaderText = "金額"; //template3.BestFitColumns(BestFitColumnMode.AllCells); template3.AllowAddNewRow = false; template3.AllowRowResize = false; template3.ShowColumnHeaders = true; template3.ShowRowHeaderColumn = true; template3.AllowDeleteRow = false; template3.AllowDragToGroup = false; this.radGridView1.Templates.Add(template3); GridViewRelation relation3 = new GridViewRelation(this.radGridView1.MasterTemplate); relation3.ChildTemplate = template3; relation3.ParentColumnNames.Add("OutServiceDateGuid"); relation3.ChildColumnNames.Add("OutServiceDateGuid"); this.radGridView1.Relations.Add(relation3); DataTable vMembrane = new DataTable("vMembrane"); vMembrane.Columns.Add("OutServiceDateGuid", typeof(Guid)); vMembrane.Columns.Add("NameOrColor", typeof(string)); vMembrane.Columns.Add("Qty", typeof(string)); vMembrane.Columns.Add("QtyUnitName", typeof(string)); vMembrane.Columns.Add("Weight", typeof(string)); vMembrane.Columns.Add("SumPrice", typeof(string)); //for (int i = 0; i < 40; i++) //{ // vMembrane.Rows.Add("50ED1E91-868C-42AC-9CA9-00A56F78C3" + (i + 3).ToString("0#"), "vMembrane中心" + i.ToString(), i, i, i); //} GridViewTemplate template4 = new GridViewTemplate(); template4.Caption = "膜"; template4.DataSource = vMembrane; template4.Columns["OutServiceDateGuid"].IsVisible = false; template4.Columns["NameOrColor"].HeaderText = "成品規格"; template4.Columns["Qty"].HeaderText = "數量"; template4.Columns["QtyUnitName"].HeaderText = "單位"; template4.Columns["SumPrice"].HeaderText = "金額"; //template4.BestFitColumns(BestFitColumnMode.AllCells); template4.AllowAddNewRow = false; template4.AllowRowResize = false; template4.ShowColumnHeaders = true; template4.ShowRowHeaderColumn = true; template4.AllowDeleteRow = false; template4.AllowDragToGroup = false; this.radGridView1.Templates.Add(template4); GridViewRelation relation4 = new GridViewRelation(this.radGridView1.MasterTemplate); relation4.ChildTemplate = template4; relation4.ParentColumnNames.Add("OutServiceDateGuid"); relation4.ChildColumnNames.Add("OutServiceDateGuid"); this.radGridView1.Relations.Add(relation4); DataTable vCheck = new DataTable("vCheck"); vCheck.Columns.Add("OutServiceDateGuid", typeof(Guid)); vCheck.Columns.Add("NameOrColor", typeof(string)); vCheck.Columns.Add("Qty", typeof(string)); vCheck.Columns.Add("QtyUnitName", typeof(string)); vCheck.Columns.Add("Weight", typeof(string)); vCheck.Columns.Add("SumPrice", typeof(string)); vCheck.Columns.Add("CheckItem", typeof(string)); //for (int i = 0; i <10; i++) //{ // vCheck.Rows.Add("50ED1E91-868C-42AC-9CA9-00A56F78C3" + (i + 4).ToString("0#"), "中心" + i.ToString(), i, i, i); //} GridViewTemplate template5 = new GridViewTemplate(); template5.Caption = "檢測"; template5.DataSource = vCheck; template5.Columns["OutServiceDateGuid"].IsVisible = false; template5.Columns["NameOrColor"].HeaderText = "樣品名稱與規格"; template5.Columns["CheckItem"].HeaderText = "檢驗項目"; template5.Columns["CheckItem"].WrapText = true; template5.Columns["Qty"].HeaderText = "數量"; template5.Columns["QtyUnitName"].HeaderText = "單位"; template5.Columns["SumPrice"].HeaderText = "金額"; //template5.BestFitColumns(BestFitColumnMode.AllCells); template5.AllowAddNewRow = false; template5.AllowRowResize = false; template5.ShowColumnHeaders = true; template5.ShowRowHeaderColumn = true; template5.AllowDeleteRow = false; template5.AllowDragToGroup = false; this.radGridView1.Templates.Add(template5); GridViewRelation relation5 = new GridViewRelation(this.radGridView1.MasterTemplate); relation5.ChildTemplate = template5; relation5.ParentColumnNames.Add("OutServiceDateGuid"); relation5.ChildColumnNames.Add("OutServiceDateGuid"); this.radGridView1.Relations.Add(relation5); Open the application and scroll the grid a bit, you will see that any newly layouted cell will be on the most left corner. Workaround: Use the following code after populating the grid with data: this.radGridView1.Columns[3].Width += 5; this.radGridView1.Columns[3].Width -= 5;
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; }
To reproduce: Download the attached project and run it. You will see the memory will increase