To reproduce: 1. Perform searching in the grid. 2. Group by a random column. 3. Navigating with next/previous buttons do not navigate the results in the displayed order. Workaround: set the EnablePaging property to false.
To reproduce: public Form1() { InitializeComponent(); this.radGridView1.Columns.Add("Col1"); this.radGridView1.Rows.Add("word \u00AD word"); this.radGridView1.Rows.Add("word - word"); } Workaround: replace "\u00AD" with "-" private void radGridView1_CellFormatting(object sender, Telerik.WinControls.UI.CellFormattingEventArgs e) { e.CellElement.Text = e.CellElement.Text.Replace("\u00AD", "-"); }
To reproduce: private void Form1_Load(object sender, EventArgs e) { this.productsTableAdapter.Fill(this.nwindDataSet.Products); this.radGridView1.DataSource = this.productsBindingSource; GridViewSummaryItem summaryItem = new GridViewSummaryItem(); summaryItem.Name = "UnitPrice"; summaryItem.Aggregate = GridAggregateFunction.Count; GridViewSummaryRowItem summaryRowItem = new GridViewSummaryRowItem(); summaryRowItem.Add(summaryItem); this.radGridView1.SummaryRowsTop.Add(summaryRowItem); GroupDescriptor descriptor1 = new GroupDescriptor(); descriptor1.GroupNames.Add("CategoryID", ListSortDirection.Ascending); this.radGridView1.GroupDescriptors.Add(descriptor1); GroupDescriptor descriptor11 = new GroupDescriptor(); descriptor11.GroupNames.Add("SupplierID", ListSortDirection.Ascending); this.radGridView1.GroupDescriptors.Add(descriptor11); GroupDescriptor descriptor2 = new GroupDescriptor(); descriptor2.GroupNames.Add("QuantityPerUnit", ListSortDirection.Ascending); descriptor2.GroupNames.Add("UnitsInStock", ListSortDirection.Ascending); this.radGridView1.GroupDescriptors.Add(descriptor2); GroupDescriptor descriptor3 = new GroupDescriptor(); descriptor3.GroupNames.Add("UnitsOnOrder", ListSortDirection.Ascending); descriptor3.GroupNames.Add("ReorderLevel", ListSortDirection.Descending); this.radGridView1.GroupDescriptors.Add(descriptor3); GroupDescriptor descriptor4 = new GroupDescriptor(); descriptor4.GroupNames.Add("Discontinued", ListSortDirection.Ascending); this.radGridView1.GroupDescriptors.Add(descriptor4); } private void radButton1_Click(object sender, EventArgs e) { GridViewSpreadExport spreadExporter = new GridViewSpreadExport(this.radGridView1); SpreadExportRenderer exportRenderer = new SpreadExportRenderer(); string filePath = @"..\..\exported" + DateTime.Now.ToShortTimeString().Replace(":", "_") + ".xlsx"; spreadExporter.ExportGroupedColumns = true; spreadExporter.ExportChildRowsGrouped = true; spreadExporter.HiddenColumnOption = Telerik.WinControls.UI.Export.HiddenOption.DoNotExport; spreadExporter.ExportVisualSettings = true; spreadExporter.SummariesExportOption = Telerik.WinControls.UI.Export.SummariesOption.ExportAll; spreadExporter.RunExport(filePath, exportRenderer); Process.Start(filePath); } Workaround: set the ExportChildRowsGrouped property to false.
To reproduce: 1. Use the following code: private void Form1_Load(object sender, EventArgs e) { this.customersTableAdapter.Fill(this.nwindDataSet.Customers); this.radGridView1.DataSource = customersBindingSource; this.radGridView1.AutoSizeColumnsMode = Telerik.WinControls.UI.GridViewAutoSizeColumnsMode.Fill; this.radGridView1.CellEndEdit += radGridView1_CellEndEdit; this.radGridView1.AutoSizeRows = true; SortDescriptor descriptor = new SortDescriptor(); descriptor.PropertyName = "Country"; descriptor.Direction = ListSortDirection.Ascending; this.radGridView1.MasterTemplate.SortDescriptors.Add(descriptor); } void radGridView1_CellEndEdit(object sender, Telerik.WinControls.UI.GridViewCellEventArgs e) { int selectedRowIndex = this.radGridView1.ChildRows.IndexOf(this.radGridView1.CurrentRow); this.radGridView1.TableElement.ScrollToRow(selectedRowIndex); } 2. Modify cell value in the sorted column. After the editor value is confirmed by pressing Enter, you scroll to the current column. However, you do not observe the expected behavior. Workaround: set the AutoSizeRows property to false.
To reproduce: - Remove the new row from the grid. - Start the application and delete all rows. - When the last row is deleted the SelectionChanged does not fire. Workaround: - Use the UserDeletedRow event instead.
Workaround: use a GridPrintStyle and define a HierarchyIndent = 0 private void PrintGrid() { GridPrintStyle style = new GridPrintStyle(); style.HierarchyIndent = 0; this.radGridView1.PrintStyle = style; this.radGridView1.PrintPreview(); }
To reproduce: private void RadForm1_Load(object sender, EventArgs e) { DataTable dt = new DataTable(); dt.Columns.Add("col1", typeof(bool)); dt.Columns.Add("col2", typeof(bool)); dt.Rows.Add(0, 1); dt.Rows.Add(0, 1); dt.Rows.Add(0, 1); RadGridView1.DataSource = dt; ((Telerik.WinControls.UI.GridViewCheckBoxColumn)RadGridView1.Columns(0)).EnableHeaderCheckBox = true; ((Telerik.WinControls.UI.GridViewCheckBoxColumn)RadGridView1.Columns(1)).EnableHeaderCheckBox = true; RadGridView1.HeaderCellToggleStateChanged += radGridView1_HeaderCellToggleStateChanged; } - Start the application and click in the second row in the first column. Workaraound: public class MyGridCheckBoxHeaderCellElement : GridCheckBoxHeaderCellElement { public MyGridCheckBoxHeaderCellElement(GridViewDataColumn col, GridRowElement row) : base(col, row) { } protected override void SetCheckBoxState(ToggleState state) { if (this.ColumnInfo.Name != this.GridViewElement.CurrentCell.ColumnInfo.Name) { return; } base.SetCheckBoxState(state); } }
To reproduce: 1. Perform searching in the grid. 2. Sort by a random column. 3. Navigating with next/previous buttons do not navigate the results in the displayed order. Please refer to the attached gif file. Workaround: clear the cache of the search row after sorting is changed: private void radGridView1_SortChanged(object sender, Telerik.WinControls.UI.GridViewCollectionChangedEventArgs e) { string searchCriteria = this.radGridView1.MasterView.TableSearchRow.SearchCriteria; FieldInfo fi = typeof(GridViewSearchRowInfo).GetField("cache", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); Hashtable cache = fi.GetValue(this.radGridView1.MasterView.TableSearchRow) as Hashtable; cache.Clear(); this.radGridView1.MasterView.TableSearchRow.Search(searchCriteria); }
To reproduce: - Bind the grid to a DataView. The grid must have combo box column. - Change the filter of the DataView like this: Private Sub MasterTemplate_FilterExpressionChanged(sender As Object, e As FilterExpressionChangedEventArgs) Handles RadGridView.FilterExpressionChanged _companies.RowFilter = e.FilterExpression End Sub - Set a filter to the combo box column and then set reset by selecting no filter in the drop down. Workaround: Public Class MyGridFilterComboBoxCellElement Inherits GridFilterComboBoxCellElement Public Sub New(ByVal col As GridViewDataColumn, ByVal row As GridRowElement) MyBase.New(col, row) End Sub Protected Overrides Sub SetContentCore(ByVal value As Object) If Me.ComboBoxColumnInfo IsNot Nothing Then MyBase.SetContentCore(value) End If End Sub End Class Private Sub radGridView1_CreateCell(ByVal sender As Object, ByVal e As GridViewCreateCellEventArgs) If e.CellType Is GetType(GridFilterComboBoxCellElement) Then e.CellType = GetType(MyGridFilterComboBoxCellElement) End If End Sub
To reproduce: Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Me.CustomersTableAdapter.Fill(Me.NwindDataSet.Customers) 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).Columns.Add(Me.RadGridView1.Columns("CompanyName")) view.ColumnGroups(0).Rows(0).Columns.Add(Me.RadGridView1.Columns("ContactName")) view.ColumnGroups(0).Rows(0).Columns.Add(Me.RadGridView1.Columns("ContactTitle")) view.ColumnGroups(1).Groups(0).Rows.Add(New GridViewColumnGroupRow()) view.ColumnGroups(1).Groups(0).Rows(0).Columns.Add(Me.RadGridView1.Columns("Address")) view.ColumnGroups(1).Groups(0).Rows(0).Columns.Add(Me.RadGridView1.Columns("City")) view.ColumnGroups(1).Groups(0).Rows(0).Columns(1).RowSpan = 40 view.ColumnGroups(1).Groups(0).Rows(0).Columns.Add(Me.RadGridView1.Columns("Country")) view.ColumnGroups(1).Groups(1).Rows.Add(New GridViewColumnGroupRow()) view.ColumnGroups(1).Groups(1).Rows(0).Columns.Add(Me.RadGridView1.Columns("Phone")) view.ColumnGroups(1).Groups(1).Rows(0).Columns.Add(Me.RadGridView1.Columns("Fax")) RadGridView1.ViewDefinition = view Dim summaryItem As New GridViewSummaryItem() summaryItem.Name = "Address" summaryItem.Aggregate = GridAggregateFunction.Count Dim summaryRowItem As New GridViewSummaryRowItem() summaryRowItem.Add(summaryItem) Me.RadGridView1.SummaryRowsTop.Add(summaryRowItem) Me.RadGridView1.MasterView.SummaryRows(0).PinPosition = PinnedRowPosition.Top Me.RadGridView1.MasterView.SummaryRows(0).Height = 20 End Sub Workaround: use the ViewCellFormatting event and set the TextAlignment property to MiddleTop for the summary cells.
To reproduce: Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Me.CustomersTableAdapter.Fill(Me.NwindDataSet.Customers) Me.RadGridView1.DataSource = Me.CustomersBindingSource 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).Columns.Add(Me.RadGridView1.Columns("CompanyName")) view.ColumnGroups(0).Rows(0).Columns.Add(Me.RadGridView1.Columns("ContactName")) view.ColumnGroups(0).Rows(0).Columns.Add(Me.RadGridView1.Columns("ContactTitle")) view.ColumnGroups(1).Groups(0).Rows.Add(New GridViewColumnGroupRow()) view.ColumnGroups(1).Groups(0).Rows(0).Columns.Add(Me.RadGridView1.Columns("Address")) view.ColumnGroups(1).Groups(0).Rows(0).Columns.Add(Me.RadGridView1.Columns("City")) view.ColumnGroups(1).Groups(0).Rows(0).Columns.Add(Me.RadGridView1.Columns("Country")) view.ColumnGroups(1).Groups(1).Rows.Add(New GridViewColumnGroupRow()) view.ColumnGroups(1).Groups(1).Rows(0).Columns.Add(Me.RadGridView1.Columns("Phone")) view.ColumnGroups(1).Groups(1).Rows(0).Columns.Add(Me.RadGridView1.Columns("Fax")) RadGridView1.ViewDefinition = view RadGridView1.BestFitColumns(BestFitColumnMode.AllCells) End Sub Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown Dim spreadExporter As New GridViewSpreadExport(RadGridView1) Dim fileName As String = "..\..\exported.xlsx" Dim exportRenderer As New SpreadExportRenderer() spreadExporter.SheetName = "Sheet1" spreadExporter.ExportVisualSettings = True spreadExporter.SummariesExportOption = SummariesOption.ExportOnlyTop spreadExporter.SheetMaxRows = ExcelMaxRows._1048576 spreadExporter.HiddenColumnOption = HiddenOption.DoNotExport spreadExporter.HiddenRowOption = HiddenOption.DoNotExport spreadExporter.FileExportMode = FileExportMode.CreateOrOverrideFile spreadExporter.RunExport(fileName, exportRenderer) Process.Start(fileName) End Sub Workaround: by using the SpreadExportRenderer.WorkbookCreated event you can remove the header cells and add new ones in order to display the same header layout as in the grid: http://www.telerik.com/help/winforms/gridview-exporting-data-spread-export.html http://www.telerik.com/help/winforms/spreadprocessing-working-with-cells-insert-remove-cells.html http://www.telerik.com/blogs/getting-started-with-radspreadprocessing-volume-1
To reproduce: public Form1() { InitializeComponent(); ColumnGroupsViewDefinition columnGroupsView; columnGroupsView = new ColumnGroupsViewDefinition(); columnGroupsView.ColumnGroups.Add(new GridViewColumnGroup()); columnGroupsView.ColumnGroups.Add(new GridViewColumnGroup()); columnGroupsView.ColumnGroups.Add(new GridViewColumnGroup()); columnGroupsView.ColumnGroups.Add(new GridViewColumnGroup()); columnGroupsView.ColumnGroups[0].ShowHeader = false; columnGroupsView.ColumnGroups[0].Rows.Add(new GridViewColumnGroupRow()); columnGroupsView.ColumnGroups[0].Rows[0].ColumnNames.Add("colPINNED_LEFT"); columnGroupsView.ColumnGroups[1].Rows.Add(new GridViewColumnGroupRow()); columnGroupsView.ColumnGroups[1].Rows[0].ColumnNames.Add("colDATE"); columnGroupsView.ColumnGroups[2].Rows.Add(new GridViewColumnGroupRow()); columnGroupsView.ColumnGroups[2].Rows.Add(new GridViewColumnGroupRow()); columnGroupsView.ColumnGroups[2].Rows[0].ColumnNames.Add("colTITLE"); columnGroupsView.ColumnGroups[2].Rows[1].ColumnNames.Add("colTEXT"); columnGroupsView.ColumnGroups[3].Rows.Add(new GridViewColumnGroupRow()); columnGroupsView.ColumnGroups[3].Rows[0].ColumnNames.Add("colPINNED_RIGHT"); this.radGridView1.ViewDefinition = columnGroupsView; this.radGridView1.Columns["colDATE"].Width = 110; this.radGridView1.Columns["colTITLE"].Width = this.radGridView1.Width - 181; this.radGridView1.TableElement.ViewElement.RowLayout.InvalidateRenderColumns(); columnGroupsView.ColumnGroups[0].PinPosition = PinnedColumnPosition.Left; columnGroupsView.ColumnGroups[3].PinPosition = PinnedColumnPosition.Right; } Workaround: do not set the ShowHeader property to false. Use the ViewCellFormatting event to hide to necessary cell borders to simulate cells merging.
To reproduce: ColumnGroupsViewDefinition columnGroupsView; columnGroupsView = new ColumnGroupsViewDefinition(); columnGroupsView.ColumnGroups.Add(new GridViewColumnGroup()); columnGroupsView.ColumnGroups.Add(new GridViewColumnGroup()); columnGroupsView.ColumnGroups.Add(new GridViewColumnGroup()); columnGroupsView.ColumnGroups.Add(new GridViewColumnGroup()); columnGroupsView.ColumnGroups[0].Rows.Add(new GridViewColumnGroupRow()); columnGroupsView.ColumnGroups[0].Rows[0].ColumnNames.Add("colPINNED_LEFT"); columnGroupsView.ColumnGroups[1].Rows.Add(new GridViewColumnGroupRow()); columnGroupsView.ColumnGroups[1].Rows[0].ColumnNames.Add("colDATE"); columnGroupsView.ColumnGroups[2].Rows.Add(new GridViewColumnGroupRow()); columnGroupsView.ColumnGroups[2].Rows.Add(new GridViewColumnGroupRow()); columnGroupsView.ColumnGroups[2].Rows[0].ColumnNames.Add("colTITLE"); columnGroupsView.ColumnGroups[2].Rows[1].ColumnNames.Add("colTEXT"); columnGroupsView.ColumnGroups[3].Rows.Add(new GridViewColumnGroupRow()); columnGroupsView.ColumnGroups[3].Rows[0].ColumnNames.Add("colPINNED_RIGHT"); this.radGridView1.ViewDefinition = columnGroupsView; this.radGridView1.Columns["colDATE"].Width = 110; this.radGridView1.Columns["colTITLE"].Width = this.radGridView1.Width - 181; this.radGridView1.TableElement.ViewElement.RowLayout.InvalidateRenderColumns(); columnGroupsView.ColumnGroups[0].PinPosition = PinnedColumnPosition.Left; columnGroupsView.ColumnGroups[3].PinPosition = PinnedColumnPosition.Right;
To reproduce: - Add ColumnGroupsViewDefinition and subscribe to ColumnWidthChanged event. - Start the application and resize a column. Workaround: public class MyColumnGroupRowLayout : ColumnGroupRowLayout { public MyColumnGroupRowLayout(ColumnGroupsViewDefinition view) : base(view) { } public override void ResizeColumn(int delta) { base.ResizeColumn(delta); //This method will be called when a column is resized } } class MyColumnGroupsViewDefinition : ColumnGroupsViewDefinition { public override IGridRowLayout CreateRowLayout() { return new MyColumnGroupRowLayout(this); } }
How to reproduce: public partial class Form1 : Form { public Form1() { InitializeComponent(); this.radGridView1.DataSource = this.GetData(); this.radGridView1.AutoSizeColumnsMode = Telerik.WinControls.UI.GridViewAutoSizeColumnsMode.Fill } private DataTable GetData() { DataTable dt = new DataTable(); dt.Columns.Add("Id", typeof(int)); dt.Columns.Add("Name", typeof(string)); dt.Columns.Add("Age", typeof(int)); dt.Columns.Add("Date", typeof(DateTime)); dt.Columns.Add("Bool", typeof(bool)); for (int i = 0; i < 100; i++) { dt.Rows.Add(i, "Name " + i, i + 10, DateTime.Now.AddMinutes(i), i % 2 == 0 ? true : false); } return dt; } private void radButton1_Click(object sender, EventArgs e) { this.radGridView1.Columns[1].Expression = "Id * Age"; } private void radButton2_Click(object sender, EventArgs e) { string s = "default.xml"; SaveFileDialog dialog = new SaveFileDialog(); dialog.Filter = "xml files (*.xml)|*.xml|All files (*.*)|*.*"; dialog.Title = "Select a xml file"; if (dialog.ShowDialog() == DialogResult.OK) { s = dialog.FileName; } this.radGridView1.SaveLayout(s); } private void radButton3_Click(object sender, EventArgs e) { string s = "default.xml"; OpenFileDialog dialog = new OpenFileDialog(); dialog.Filter = "xml files (*.xml)|*.xml|All files (*.*)|*.*"; dialog.Title = "Select a xml file"; if (dialog.ShowDialog() == DialogResult.OK) { s = dialog.FileName; } this.radGridView1.LoadLayout(s); } } Workaround: iterate the columns prior to loading the layout and remove the expressions private void radButton3_Click(object sender, EventArgs e) { foreach (GridViewDataColumn col in this.radGridView1.Columns) { col.Expression = ""; } string s = "default.xml"; OpenFileDialog dialog = new OpenFileDialog(); dialog.Filter = "xml files (*.xml)|*.xml|All files (*.*)|*.*"; dialog.Title = "Select a xml file"; if (dialog.ShowDialog() == DialogResult.OK) { s = dialog.FileName; } this.radGridView1.LoadLayout(s); }
To reproduce: for (int i = 0; i < 5; i++) { this.radGridView1.Columns.Add("Col" + i); } ColumnGroupsViewDefinition columnGroupsView = new ColumnGroupsViewDefinition(); columnGroupsView.ColumnGroups.Add(new GridViewColumnGroup()); columnGroupsView.ColumnGroups.Add(new GridViewColumnGroup()); columnGroupsView.ColumnGroups.Add(new GridViewColumnGroup()); columnGroupsView.ColumnGroups.Add(new GridViewColumnGroup()); columnGroupsView.ColumnGroups[0].Rows.Add(new GridViewColumnGroupRow()); columnGroupsView.ColumnGroups[0].Rows[0].ColumnNames.Add("Col3"); columnGroupsView.ColumnGroups[1].Rows.Add(new GridViewColumnGroupRow()); columnGroupsView.ColumnGroups[1].Rows[0].ColumnNames.Add("Col2"); columnGroupsView.ColumnGroups[2].Rows.Add(new GridViewColumnGroupRow()); columnGroupsView.ColumnGroups[2].Rows.Add(new GridViewColumnGroupRow()); columnGroupsView.ColumnGroups[2].Rows[0].ColumnNames.Add("Col0"); columnGroupsView.ColumnGroups[2].Rows[1].ColumnNames.Add("Col1"); columnGroupsView.ColumnGroups[3].Rows.Add(new GridViewColumnGroupRow()); columnGroupsView.ColumnGroups[3].Rows[0].ColumnNames.Add("Col4"); this.radGridView1.ViewDefinition = columnGroupsView; this.radGridView1.Columns["Col2"].Width = 150; this.radGridView1.Columns["Col0"].Width = 200; Workaround: either set the columns width before setting the RadGridView.ViewDefinition or call the TableElement.ViewElement.RowLayout.InvalidateRenderColumn after specifying the width.
To reproduce: public Form1() { InitializeComponent(); DataTable dt = new DataTable(); dt.Columns.Add("Col@", typeof(string)); dt.Rows.Add("Unit"); this.radGridView1.DataSource = dt; this.radGridView1.EnableFiltering = true; this.radGridView1.BestFitColumns(); } Workaround: modify the Name of each column in order to remove the "@" symbol: foreach (GridViewColumn c in this.radGridView1.Columns) { c.Name = c.Name.Replace("@", ""); }
Workaround: before printing set the AutoSizeRows = false, then you can set it again to true private void radButton1_Click(object sender, EventArgs e) { if (!this.radGridView1.Columns["ImageColumn"].IsVisible) { int height = this.radGridView1.TableElement.ViewTemplate.Rows[0].Height; this.radGridView1.AutoSizeRows = false; this.radGridView1.TableElement.RowHeight = height; } this.radGridView1.PrintPreview(); this.radGridView1.AutoSizeRows = true; }
To reproduce: 1. Drag and drop RadGridView 2. Open Property Builder 3. Add a column and select it 4. Open Settings tab and you will see that there are two ampersand symbols 5. Add template or select Master Template and you will see that there are two ampersand symbols