To reproduce: public class CustomGridViewCheckBoxColumn : GridViewCheckBoxColumn { } CustomGridViewCheckBoxColumn col = new CustomGridViewCheckBoxColumn(); this.radGridView1.Columns.Add(col); this.radGridView1.EnableFiltering = true; 1. Click the filter button and select "Custom" 2. Close the dialog. Workaround: this.radGridView1.CreateCompositeFilterDialog += radGridView1_CreateCompositeFilterDialog; private void radGridView1_CreateCompositeFilterDialog(object sender, GridViewCreateCompositeFilterDialogEventArgs e) { e.Dialog = new CustomCompositeFilterForm(); } public class CustomCompositeFilterForm : CompositeFilterForm { public override void Initialize(GridViewDataColumn dataColumn, FilterDescriptor filterDescriptor, bool useTypedEditors) { base.Initialize(dataColumn, filterDescriptor, useTypedEditors); if (dataColumn is GridViewCheckBoxColumn) { RadGroupBox groupBox = this.Controls[0] as RadGroupBox; groupBox.Controls.Remove(this.RightEditor); groupBox.Controls.Remove(this.LeftEditor); MethodInfo mi = typeof(CompositeFilterForm).GetMethod("InitializeCheckBoxEditors", BindingFlags.Instance | BindingFlags.NonPublic); mi.Invoke(this, null); } } }
To reproduce: use the following code snippet and enter in the filter row one of the row values as it is shown in the screenshot: this.radGridView1.EnableFiltering = true; GridViewDateTimeColumn dateTimeColumn = new GridViewDateTimeColumn("DateTimeColumn"); dateTimeColumn.Format = DateTimePickerFormat.Custom; dateTimeColumn.CustomFormat = "dd/MM/yyyy HH:mm:ss"; radGridView1.MasterTemplate.Columns.Add(dateTimeColumn); this.radGridView1.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill; for (int i = 0; i < 10; i++) { this.radGridView1.Rows.Add(DateTime.Now.AddDays(i)); } Workaround: custom filtering: http://docs.telerik.com/devtools/winforms/gridview/filtering/custom-filtering
To reproduce: 1. Run the attached application. 2. Click into the cell in Column One and expand the combo box 3. While the combo box is still expanded, right click on any header cell in the grid Step 3 should result in a NullReferenceException Workaround: Friend Class MyGridHeaderCellElement Inherits GridHeaderCellElement Public Sub New(ByVal col As GridViewColumn, ByVal row As GridRowElement) MyBase.New(col, row) End Sub Protected Overrides Sub ShowContextMenu() If Me.ViewTemplate IsNot Nothing Then MyBase.ShowContextMenu() End If End Sub Protected Overrides ReadOnly Property ThemeEffectiveType() As Type Get Return GetType(GridHeaderCellElement) End Get End Property End Class Private Sub radGridView1_CreateCell(ByVal sender As Object, ByVal e As GridViewCreateCellEventArgs) If Object.ReferenceEquals(e.CellType, GetType(GridHeaderCellElement)) Then e.CellType = GetType(MyGridHeaderCellElement) End If End Sub
To reproduce: public Form1() { InitializeComponent(); List<Item> items = new List<Item>(); for (int i = 1; i <= 10; i++) { items.Add(new Item(i, "Product" + i, 0.25m * i, i)); } this.radGridView1.DataSource = items; GridViewDecimalColumn col = new GridViewDecimalColumn("Calculated Column"); col.Expression = "Quantity*Price/100"; this.radGridView1.Columns.Add(col); this.radGridView1.AutoSizeColumnsMode = Telerik.WinControls.UI.GridViewAutoSizeColumnsMode.Fill; } public class Item { public int Id { get; set; } public string Name { get; set; } public decimal Price { get; set; } public int Quantity { get; set; } public Item(int id, string name, decimal price, int quantity) { this.Id = id; this.Name = name; this.Price = price; this.Quantity = quantity; } } MemoryStream s = new MemoryStream(); private void radButton1_Click(object sender, EventArgs e) { s = new MemoryStream(); this.radGridView1.SaveLayout(s); } private void radButton2_Click(object sender, EventArgs e) { this.radGridView1.LoadLayout(s); } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { s.Close(); } Workaround: before loading the layout, clear the columns
To reproduce: run the attached sample project. Workaround: set the AutoSizeRows property to false before exporting and set it back to true after the export is completed.
To reproduce: - Bind the grid and reset its data source in the CellValueChanged event handler. - Start the application, click in a cell, delete the contents and right click a header cell. - Exception is thrown. Workaround: class MyGridHeaderCellElement : GridHeaderCellElement { public MyGridHeaderCellElement(GridViewColumn col, GridRowElement row) : base(col, row) { } protected override Type ThemeEffectiveType { get { return typeof(GridHeaderCellElement); } } protected override void ShowContextMenu() { if (this.ViewTemplate != null) { base.ShowContextMenu(); } } } private void RadGridView1_CreateCell(object sender, GridViewCreateCellEventArgs e) { if (e.CellType == typeof(GridHeaderCellElement)) { e.CellType = typeof(MyGridHeaderCellElement); } }
To reproduce: setup the hierarchy at design time: http://docs.telerik.com/devtools/winforms/gridview/hierarchical-grid/tutorial-binding-to-hierarchical-data Please refer to the attached gif file illustrating the exact steps. NOTE: when the "Object does not match target type" error message is displayed, some of the properties are missing, e.g. MaxLength. Workaround: modify the columns' properties at run time.
To reproduce: private void Form1_Load(object sender, EventArgs e) { this.productsTableAdapter.Fill(this.nwindDataSet.Products); this.radGridView1.EnableFiltering = true; this.radGridView1.ShowHeaderCellButtons = true; this.radGridView1.ShowFilteringRow = false; this.radGridView1.Columns["UnitPrice"].FormatString = "{0:$#,###0.00;-$#,###0.00;$0.00}"; } Workaround: in order to format the cells, use the CellFormatting event. As to the filter popup, use the following approach: this.radGridView1.FilterPopupInitialized += radGridView1_FilterPopupInitialized; private void radGridView1_FilterPopupInitialized(object sender, Telerik.WinControls.UI.FilterPopupInitializedEventArgs e) { RadListFilterPopup popup = e.FilterPopup as RadListFilterPopup; if (popup != null) { popup.MenuTreeElement.TreeView.NodeFormatting -= TreeView_NodeFormatting; popup.MenuTreeElement.TreeView.NodeFormatting += TreeView_NodeFormatting; } } private void TreeView_NodeFormatting(object sender, TreeNodeFormattingEventArgs e) { decimal price; if (decimal.TryParse(e.Node.Text, out price)) { e.NodeElement.ContentElement.Text = string.Format("{0:$#,###0.00;-$#,###0.00;$0.00}", price); } }
To reproduce: Sub New() InitializeComponent() ThemeResolutionService.ApplicationThemeName = "Breeze" Dim dt As New DataTable dt.Columns.Add("Id", GetType(Integer)) dt.Columns.Add("ParentId", GetType(Integer)) dt.Columns.Add("Name", GetType(String)) For index = 1 To 5 dt.Rows.Add(index, 0, "Parent" & index) Next Dim rand As New Random For index = 6 To 25 dt.Rows.Add(index, rand.Next(1, 6), "Parent" & index) Next Me.RadGridView1.Relations.AddSelfReference(Me.RadGridView1.MasterTemplate, "Id", "ParentId") Me.RadGridView1.DataSource = dt Me.RadGridView1.AutoSizeColumnsMode = Telerik.WinControls.UI.GridViewAutoSizeColumnsMode.Fill Me.RadGridView1.AutoSizeRows = True End Sub
Please refer to the attached project. Workakround: call the BeginEdit method in the RadGridView.Click event.
Add an ExportToXlsx option into the native RadGridView exporting. It has been done for WPF (http://docs.telerik.com/devtools/wpf/controls/radgridview/export/export-xlsx) - why not WinForms. This would avoid the pain of having to implement the export using RadSpreadProcessing.
To reproduce: this.radGridView1.EnableFiltering = true; this.radGridView1.Columns.Add("Test column"); this.radGridView1.AutoSizeColumnsMode = Telerik.WinControls.UI.GridViewAutoSizeColumnsMode.Fill; this.radGridView1.Rows.Add("Test "); Workaround: use custom filtering: this.radGridView1.EnableCustomFiltering = true; this.radGridView1.CustomFiltering += radGridView1_CustomFiltering; private void radGridView1_CustomFiltering(object sender, GridViewCustomFilteringEventArgs e) { if (this.radGridView1.FilterDescriptors.Count > 0) { GridViewCellInfo cell = e.Row.Cells[this.radGridView1.FilterDescriptors[0].PropertyName]; e.Visible = cell.Value.ToString().StartsWith(this.radGridView1.FilterDescriptors[0].Value.ToString()); } }
To reproduce: follow the steps defined in the following help article: http://docs.telerik.com/devtools/winforms/gridview/hierarchical-grid/tutorial-binding-to-hierarchical-data Then, add a nested template in the second level. After closing the GridViewTemplate Collection Editor, you will notice that the template is not saved. http://screencast.com/t/7VDYiopuUHn Workaround: setup the hierarchy programmatically : http://docs.telerik.com/devtools/winforms/gridview/hierarchical-grid/binding-to-hierarchical-data-programmatically
WORKAROUND: 1. Create a custom GridTableElement and override the ProcessColumnEvent method. 2. Create a custom TableViewDefinition and override the CreateViewUIElement to return the custom table element. 3. Assign the custom view definition to the grid's ViewDefinition property public class CustomGridTableElement : GridTableElement { protected override GridViewEventResult ProcessColumnEvent(GridViewColumn column, GridViewEvent eventData) { if (eventData.Info.Id == KnownEvents.PropertyChanged) { RadPropertyChangedEventArgs args = eventData.Arguments[0] as RadPropertyChangedEventArgs; if (args.Property == GridViewColumn.IsVisibleProperty) { ViewElement.UpdateRowsWhenColumnsChanged(); if (this.GridViewElement.AutoSizeRows) { foreach (GridViewRowInfo row in this.ViewTemplate.Rows) { row.Height = -1; } this.UpdateLayout(); this.RowScroller.UpdateScrollRange(); } return null; } } return base.ProcessColumnEvent(column, eventData); } protected override Type ThemeEffectiveType { get { return typeof(GridTableElement); } } } public class CustomTableViewDefinition : TableViewDefinition { public override IRowView CreateViewUIElement(GridViewInfo viewInfo) { return new CustomGridTableElement(); } } this.radGridView1.ViewDefinition = new CustomTableViewDefinition();
One should be able to set the maximum row height when the rows are auto sized and the visual styles are exported.
To reproduce: Open the attached project, select two rows and delete them. Workaround: private void RadGridView1_RowValidating(object sender, Telerik.WinControls.UI.RowValidatingEventArgs e) { if (e.RowIndex != -1) { } }
To reproduce: Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Me.ProductsTableAdapter.Fill(Me.NwindDataSet.Products) Me.CategoriesTableAdapter.Fill(Me.NwindDataSet.Categories) RadGridView1.AutoGenerateHierarchy = True RadGridView1.DataSource = Me.NwindDataSet RadGridView1.DataMember = "Categories" Me.RadGridView1.MasterTemplate.AutoSizeColumnsMode = Telerik.WinControls.UI.GridViewAutoSizeColumnsMode.Fill Me.RadGridView1.MasterTemplate.Templates(0).AutoSizeColumnsMode = Telerik.WinControls.UI.GridViewAutoSizeColumnsMode.Fill Me.RadGridView1.UseScrollbarsInHierarchy = True End Sub Private Sub RadGridView1_ViewCellFormatting(sender As Object, e As CellFormattingEventArgs) Handles RadGridView1.ViewCellFormatting If e.Row.HierarchyLevel > 0 Then e.CellElement.TableElement.RowHeaderColumnWidth = 100 End If End Sub
To reproduce: make sure only the first row is selected then Shift select row 3. DataTable dt = new DataTable(); dt.Columns.Add("Value", typeof(int)); dt.Columns.Add("Date", typeof(DateTime)); dt.Columns.Add("Description", typeof(string)); for (int index = 0; index < 15; index++) { dt.Rows.Add(new object[] { index % 5, DateTime.Now.AddSeconds(10), "Index = " + index }); } radGridView1.DataSource = dt; radGridView1.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill; radGridView1.MultiSelect = true; foreach (GridViewColumn col in this.radGridView1.Columns) { ConditionalFormattingObject obj = new ConditionalFormattingObject("Value", ConditionTypes.Equal, col.Index.ToString(), "", true); obj.RowBackColor = Color.SkyBlue; obj.RowForeColor = Color.Red; obj.TextAlignment = ContentAlignment.MiddleRight; obj.ApplyOnSelectedRows = false; this.radGridView1.Columns[0].ConditionalFormattingObjectList.Add(obj); } Workaround: use the CellFormatting event to apply the desired formatting by using the API for overriding theme settings: http://docs.telerik.com/devtools/winforms/gridview/cells/formatting-cells http://docs.telerik.com/devtools/winforms/telerik-presentation-framework/override-theme-settings-at-run-time
How to reproduce: public partial class Form1 : Form { public Form1() { InitializeComponent(); this.radGridView1.DataSource = this.GetData(); this.radGridView1.AutoSizeColumnsMode = Telerik.WinControls.UI.GridViewAutoSizeColumnsMode.Fill; this.radGridView1.Columns[0].DisableHTMLRendering = false; this.radGridView1.PrintCellFormatting += radGridView1_PrintCellFormatting; } private void radGridView1_PrintCellFormatting(object sender, Telerik.WinControls.UI.PrintCellFormattingEventArgs e) { e.PrintCell.EnableHtmlTextRendering = true; } private DataTable GetData() { DataTable dt = new DataTable(); dt.Columns.Add("Name", typeof(string)); dt.Columns.Add("Date", typeof(DateTime)); dt.Columns.Add("Bool", typeof(bool)); dt.Columns.Add("Description", typeof(string)); for (int i = 0; i < 10; i++) { for (int j = 0; j < 5; j++) { dt.Rows.Add(@"<html><b>Name " + j, DateTime.Now.AddDays(i), i % 2 == 0 ? true : false, "Description " + i); } } return dt; } private void radButton1_Click(object sender, EventArgs e) { GridPrintStyle style = new GridPrintStyle(); style.FitWidthMode = PrintFitWidthMode.FitPageWidth; style.PrintGrouping = true; style.PrintSummaries = false; style.PrintHeaderOnEachPage = true; style.PrintHiddenColumns = false; style.CellPadding = new Padding(100, 0, 0, 0); this.radGridView1.PrintStyle = style; this.radGridView1.PrintPreview(); } } Workaround: refer to the attached project
To reproduce: private void Form1_Load(object sender, EventArgs e) { this.productsTableAdapter.Fill(this.nwindDataSet.Products); this.radGridView1.BestFitColumns(BestFitColumnMode.AllCells); } private void radGridView1_ViewCellFormatting(object sender, Telerik.WinControls.UI.CellFormattingEventArgs e) { if (e.CellElement is GridGroupContentCellElement) { e.CellElement.TextWrap = true; } else { e.CellElement.ResetValue(LightVisualElement.TextWrapProperty, ValueResetFlags.Local); } } Workaround: set the AutoSizeColumnsMode property to GridViewAutoSizeColumnsMode.Fill and use the ViewCellFormatting event to wrap the text: private void radGridView1_ViewCellFormatting(object sender, Telerik.WinControls.UI.CellFormattingEventArgs e) { if (e.CellElement is GridGroupContentCellElement) { e.CellElement.TextWrap = true; } else { e.CellElement.ResetValue(LightVisualElement.TextWrapProperty, ValueResetFlags.Local); } }