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); } }
Please find attached a sample project. 1. Select the new row and activate te editor. 2. Do not enter any value and click outside the new row. The exception is thrown. Workaround: bind directly to the query result: this.radGridView1.DataSource = (from p in context.Customers select p).ToList();
Workaround: instead of using the default alternating row color for the mentioned themes, use the override theme setting in the CellFormatting event: http://www.telerik.com/help/winforms/tpf-override-theme-settings-at-run-time.html private void radGridView1_CellFormatting(object sender, CellFormattingEventArgs e) { if (e.Row is GridViewDataRowInfo) { if (e.RowIndex % 2 == 0) { e.CellElement.SetThemeValueOverride(LightVisualElement.BackColorProperty, Color.Red, ""); e.CellElement.SetThemeValueOverride(LightVisualElement.DrawFillProperty, true, ""); e.CellElement.SetThemeValueOverride(LightVisualElement.GradientStyleProperty, GradientStyles.Solid, ""); } else { e.CellElement.ResetThemeValueOverride(LightVisualElement.BackColorProperty, ""); e.CellElement.ResetThemeValueOverride(LightVisualElement.DrawFillProperty, ""); e.CellElement.ResetThemeValueOverride(LightVisualElement.GradientStyleProperty, ""); } } }
Currently the Paging functionality does not support server side operations. It should be extended to support them, e.g. with EntityFramework and Telerik Data Access
To reproduce: Search a specific text by focusing the search box programmatically and the using the SendKeys method: private void radButton1_Click(object sender, EventArgs e) { GridSearchCellElement searchCell = radGridView1.TableElement.GetCellElement(radGridView1.MasterView.TableSearchRow, null) as GridSearchCellElement; if (searchCell != null) { searchCell.SearchTextBox.Focus(); searchCell.SearchTextBox.Text = string.Empty; SendKeys.Send("t"); SendKeys.Send("e"); SendKeys.Send("s"); SendKeys.Send("t"); } } Workaround: Repeat the search in the SearchProgressChanged event: radGridView1.MasterView.TableSearchRow.SearchProgressChanged += TextationSearchProgressHandler; protected void TextationSearchProgressHandler(object sender, SearchProgressChangedEventArgs e) { if (e.SearchFinished && null != radGridView1.TableElement) { GridSearchCellElement searchCell = radGridView1.TableElement.GetCellElement(radGridView1.MasterView.TableSearchRow, null) as GridSearchCellElement; if (searchCell != null && searchCell.SearchTextBox.TextBoxItem.Text != e.SearchCriteria) { radGridView1.MasterView.TableSearchRow.Search(searchCell.SearchTextBox.TextBoxItem.Text); } } }
To reproduce: public Form1() { InitializeComponent(); DataTable dt = new DataTable(); for (int i = 0; i < 5; i++) { dt.Columns.Add("Col"+i); } for (int i = 0; i < 2000; i++) { DataRow row = dt.NewRow(); foreach (DataColumn col in dt.Columns) { row[col.ColumnName] = "Data" + i + "." + dt.Columns.IndexOf(col); } dt.Rows.Add(row); } this.radGridView1.DataSource = dt; this.radGridView1.AutoSizeColumnsMode = Telerik.WinControls.UI.GridViewAutoSizeColumnsMode.Fill; } private void radButton1_Click(object sender, EventArgs e) { RadPrintPreviewDialog dialog = new RadPrintPreviewDialog(); dialog.Document = this.radPrintDocument1; dialog.ShowDialog(); } Workaround: this.radGridView1.AutoSizeRows = true;
To reproduce: use the following code snippet. You will notice that the "Accounting Manager" group is missing. private void Form1_Load(object sender, EventArgs e) { this.customersTableAdapter.Fill(this.nwindDataSet.Customers); this.radGridView1.DataSource = this.customersBindingSource; ColumnGroupsViewDefinition view = 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].ColumnNames.Add("CompanyName"); view.ColumnGroups[0].Rows[0].ColumnNames.Add("ContactName"); view.ColumnGroups[0].Rows[0].ColumnNames.Add("ContactTitle"); view.ColumnGroups[1].Groups[0].Rows.Add(new GridViewColumnGroupRow()); view.ColumnGroups[1].Groups[0].Rows[0].ColumnNames.Add("Address"); view.ColumnGroups[1].Groups[0].Rows[0].ColumnNames.Add("City"); view.ColumnGroups[1].Groups[0].Rows[0].ColumnNames.Add("Country"); view.ColumnGroups[1].Groups[1].Rows.Add(new GridViewColumnGroupRow()); view.ColumnGroups[1].Groups[1].Rows[0].ColumnNames.Add("Phone"); view.ColumnGroups[1].Groups[1].Rows[0].ColumnNames.Add("Fax"); radGridView1.ViewDefinition = view; GroupDescriptor descriptor = new GroupDescriptor(); descriptor.GroupNames.Add("ContactTitle", ListSortDirection.Ascending); this.radGridView1.GroupDescriptors.Add(descriptor); this.radGridView1.Groups[0].GroupRow.IsPinned = true; }
Please refer to the attached screenshot and sample video. Workaround: public class CustomGrid : RadGridView { public override string ThemeClassName { get { return typeof(RadGridView).FullName; } } protected override void OnKeyPress(KeyPressEventArgs e) { this.BeginEdit(); if (this.GridViewElement.ActiveEditor is RadDropDownListEditor) { string symbol = e.KeyChar.ToString(); RadDropDownListEditor editor = this.GridViewElement.ActiveEditor as RadDropDownListEditor; RadDropDownListEditorElement element = editor.EditorElement as RadDropDownListEditorElement; if ((element.AutoCompleteMode & AutoCompleteMode.Suggest) == AutoCompleteMode.Suggest) { element.EditableElementText += symbol; element.EditableElement.SelectionStart = 1; element.EditableElement.SelectionLength = 0; } } base.OnKeyPress(e); } }
To reproduce: private void Form1_Load(object sender, EventArgs e) { this.productsTableAdapter.Fill(this.nwindDataSet.Products); this.categoriesTableAdapter.Fill(this.nwindDataSet.Categories); radGridView1.AllowSearchRow = true; radGridView1.DataSource = nwindDataSet.Categories; radGridView1.MasterTemplate.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill; radGridView1.UseScrollbarsInHierarchy = true; GridViewTemplate template = new GridViewTemplate(); template.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill; template.DataSource = nwindDataSet.Products; radGridView1.MasterTemplate.Templates.Add(template); GridViewRelation relation = new GridViewRelation(radGridView1.MasterTemplate); relation.ChildTemplate = template; relation.RelationName = "CategoriesProducts"; relation.ParentColumnNames.Add("CategoryID"); relation.ChildColumnNames.Add("CategoryID"); radGridView1.Relations.Add(relation); } Workaround: private void radGridView1_CurrentRowChanged(object sender, CurrentRowChangedEventArgs e) { if (this.radGridView1.CurrentRow != null) { if (this.radGridView1.CurrentRow.HierarchyLevel > 0) { tableElement.ScrollToRow((GridViewHierarchyRowInfo)(this.radGridView1.CurrentRow).Parent); this.radGridView1.TableElement.EnsureRowVisible((GridViewHierarchyRowInfo)(this.radGridView1.CurrentRow).Parent); tableElement.ScrollToRow(this.radGridView1.CurrentRow); tableElement.EnsureRowVisible(this.radGridView1.CurrentRow); } } }