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
To reproduce: Download the attached project and expand the first row. Collapse it and expand the second row. You will see that both rows will be expanded. Workaround: void radGridView1_ChildViewExpanding(object sender, ChildViewExpandingEventArgs e) { Point p = this.radGridView1.PointToClient(MousePosition); RadElement el = this.radGridView1.ElementTree.GetElementAtPoint(p); if (el != null) { GridRowElement rowElement = el.FindAncestor<GridRowElement>(); if (rowElement != null && e.ParentRow.Index != rowElement.RowInfo.Index && !e.IsExpanded) { e.Cancel = true; } } }
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") { } }
This happened multiple times. In the property builder, I tried to delete the column and Visual Studio crashed. I was able to delete other columns fine, but this particular column caused a problem. The only difference that I can see between the other columns and the one that caused the problem was the conditionalformattingobject. Once I deleted this conditionalformattingobject, I was able to delete the column without any problem.
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.
To reproduce: use the following code snippet: public Form1() { InitializeComponent(); GridViewComboBoxColumn supplierColumn = new GridViewComboBoxColumn("SupplierID"); supplierColumn.DataSource = this.suppliersBindingSource; supplierColumn.ValueMember = "SupplierID"; supplierColumn.DisplayMember = "ContactName"; supplierColumn.DropDownStyle = Telerik.WinControls.RadDropDownStyle.DropDown; this.radGridView1.Columns.Add(supplierColumn); this.radGridView1.CellEditorInitialized += radGridView1_CellEditorInitialized; } private void radGridView1_CellEditorInitialized(object sender, GridViewCellEventArgs e) { RadDropDownListEditor editor = e.ActiveEditor as RadDropDownListEditor; if (editor != null) { RadDropDownListEditorElement el = editor.EditorElement as RadDropDownListEditorElement; el.SelectedIndexChanging -= el_SelectedIndexChanging; el.SelectedIndexChanging += el_SelectedIndexChanging; el.SelectedIndexChanged -= el_SelectedIndexChanged; el.SelectedIndexChanged += el_SelectedIndexChanged; } } private void el_SelectedIndexChanged(object sender, Telerik.WinControls.UI.Data.PositionChangedEventArgs e) { Console.WriteLine("Changed"); } private void el_SelectedIndexChanging(object sender, Telerik.WinControls.UI.Data.PositionChangingCancelEventArgs e) { e.Cancel = true; } private void Form1_Load(object sender, EventArgs e) { this.suppliersTableAdapter.Fill(this.nwindDataSet.Suppliers); } When the editor is initialized you will notice that the editor's value can be changed by using the mouse wheel no matter that the SelectedIndexChanging event is cancelled.
To reproduce: 1.Add a RadGridView and add twelve columns at design time. 2.Enable filtering and use the following code: public Form1() { InitializeComponent(); radGridView1.MasterTemplate.MultiSelect = true; } private void Form1_Load(object sender, EventArgs e) { foreach (var column in radGridView1.Columns) { column.Width = 100; } } 3.When you run the application, click over the filtering cell for the 3rd column. Type in some text and click the filter button. As a result the horizontal scroll bar is positioned at right most. Workaround: radGridView1.MouseDown += radGridView1_MouseDown; radGridView1.TableElement.HScrollBar.ValueChanged += HScrollBar_ValueChanged; int scrollBarValue = 0; bool shouldResetValue = false; private void radGridView1_MouseDown(object sender, MouseEventArgs e) { RadElement clickecElement = this.radGridView1.ElementTree.GetElementAtPoint(e.Location); GridFilterRowElement filterRowElement = clickecElement.FindAncestor<GridFilterRowElement>(); GridNewRowElement newRowElement = clickecElement.FindAncestor<GridNewRowElement>(); if (clickecElement is GridFilterRowElement || clickecElement is GridNewRowElement || filterRowElement != null || newRowElement != null) { shouldResetValue = true; } else { shouldResetValue = false; } scrollBarValue = this.radGridView1.TableElement.HScrollBar.Value; } private void HScrollBar_ValueChanged(object sender, EventArgs e) { if (shouldResetValue) { this.radGridView1.TableElement.HScrollBar.Value = scrollBarValue; } }
Workaround: private void radGridView1_CellEditorInitialized(object sender, Telerik.WinControls.UI.GridViewCellEventArgs e) { GridBrowseEditor browseEditor = e.ActiveEditor as GridBrowseEditor; if (browseEditor!=null) { browseEditor.EditorElement.MinSize = new Size(0,18); GridBrowseEditorElement el = browseEditor.EditorElement as GridBrowseEditorElement; el.TextBoxItem.TextBoxControl.MinimumSize = new Size(0, 13); } }
This is not considered an issue, it is how RadGridView works. Here are more details: In order for a GridDetailViewCellElement to display a pageview instead of a single table element, either the template of the row holding it has to have more than one child template, or its ShowChildViewCaptions should be true. Once there is a page view, the tabs in it will be visible at all times, except when some of the templates has no rows and AllowAddNewRow for it is false – if it does not have any rows and the user cannot add row, it is considered that there is no need from it. If one needs to change the visibility of the tabs, this can be done in the ViewCellFormatting event: private void RadGridView1_ViewCellFormatting(object sender, CellFormattingEventArgs e) { GridDetailViewCellElement detailCell = e.CellElement as GridDetailViewCellElement; if (detailCell != null) { foreach (RadPageViewItem item in detailCell.PageViewElement.Items) { item.Visibility = Telerik.WinControls.ElementVisibility.Visible; } } }
To reproduce: add a RadGridView with many columns so the horizontal scroll bar will be shown. Start navigating by pressing the right arrow key. You will notice that when you reach the last visible column in the current view, navigating to the next column changes the whole view and the current column is displayed at the beginning of the view. The expected behavior is that after pressing the right arrow key the horizontal scroll bar will move only one column forward.
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: Add a RadGridView and set the Form.UseWaitCursor property to true. When the cursor is positioned inside the RadGridView the cursor is set back to default. Workaround: public RadForm1() { InitializeComponent(); radGridView1.GridBehavior = new CustomRowBehavior(); } public class CustomRowBehavior : BaseGridBehavior { public override bool OnMouseMove(MouseEventArgs e) { Cursor cursor = this.GridControl.Cursor; bool result = base.OnMouseMove(e); this.GridControl.Cursor = cursor; return result; } }
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: 1. Add RadGridView with 2 columns 2. Sort first column. Then sort second column. 3. Break in the SortChanged event handler method 4. e.NewItems[0].PropertyName is 'column1' and e.OldItems[0].PropertyName is 'column2', the values are swapped