ADD. RadGridView - add new column type, where each cell has a drop down which displays a calculator (GridViewCalculatorColumn)
IMPROVE. RadGridView - AllowFiltering property for a column, should hide its filter operator text
ADD. RadGridView - add new column - link column.
ADD. RadGridView - SelectLastAddedRow should work in scenarios when user adds row too, not only by adding rows from the datasource. Comment - the property is intended to work only for added rows in the RadGridView DataSource. For the rest of the cases, the cases, the UserAddedRow event should be handled.
Steps to reproduce: 1. Add a grid with several columns, so there is horizontal scroll bar 2. Add an image to the grid ImageList 3. In the CellFormatting assign the ImageKey of a cell to a value You will notice that the images are not applied initially. You have to scroll the column where you apply the images out of view and bring it back in to see the images. WORKAROUND Instead of setting the ImageKey property, set the Image property to the corresponding image from the image list.
Steps to reproduce: 1. Add a combobox column to a grid 2. Set DisplayMember, ValueMember and a data source to the column 3. Change a property in the data source that is used as value in the combo column You will see that the combo column will not display text for the item which value was changed
Steps to reproduce: 1. Add three rows to a grid 2. Filter one through CustomFiltering 3. Run the project and apply a filter that will filter one of the remaining two rows 4. Now delete the filter value. You will see that the second row will not be visible although there is no filter. WORKAROUND Clear the filter on the column when the user deletes the value of the filter: private void radGridView1_ValueChanging(object sender, ValueChangingEventArgs e) { if (this.radGridView1.CurrentColumn.Name == "ColumnName" && Convert.ToString(e.NewValue) == String.Empty) { int i = 0; while (i < this.radGridView1.FilterDescriptors.Count) { if (this.radGridView1.FilterDescriptors[i].PropertyName == "ColumnName") { this.radGridView1.FilterDescriptors.RemoveAt(i); continue; } i++; } } }
Steps to reproduce: 1. Add a RadGridView to a form 2. Add several columns and set their MinWidth to 0 3. Set the grid AutoSizeColumnsMode property to Fill 4. Run the project and you will see that you cannot resize the columns. WORKAROUND: Set the MinWidth property to a value greater than 0
Steps to reproduce: 1. Add a grid to a form and add two expression columns 2. Enable Excel-like filtering 3. Add data 4. Run the project and filter on both expression columns You will see an exception.
Steps to reproduce: 1. Add a grid to a form and populate it with hierarchical data. 2. Add a button and in its click event handler add the following: a. code that will hide all but one row in the the grid master view. b. code that will export the grid via ExportToExcMelML 3. The resulting excel file will not contain the proper data.
When exporting to excel the exporter exports null values as empty strings instead of empty excel cells.
Steps to reproduce: 1. Add a grid to a form and fill it with some data 2. Add a button and in the click event: a. Assign a new GridPrintStyle instance to the PrintStyle property b. Subscribe for the PrintCellFormatting event of the grid c. Call the PrintPreview method of the grid 3. Add a break point in the event handler of the PrintCellFormatting 4. Start the app and click the button. You will see that the break point is never hit.
Steps to reproduce: 1. Place a grid on a form and add several columns. 2. Set a ColumnGroupsViewDefinition to the grid and resize the columns so the horizontal scroll bar appears. 3. Add a button and on its click call the PrintPreview method of the grid. You will see that the horizontal scroll bar of the grid will disappear. Workaround:workaround it by increasing and decreasing the width of a single column with 1 pixel right after you call the Print method of the print document. document.Print() grid.Columns(0).Width += 1 grid.Columns(0).Width -= 1
Currently one can only set theme of the RadPrintPreviewDialog.
Steps to recreate this scenario: Create an interface e.g. IBaseInterface with couple of properties. Create another interface e.g. IChildInterface which implements the first one Create a class which implements the second interface. Create a list with items of type the child interface. Fill the list with objects of type the class. THE PROBLEM IS VALID ONLY FOR 2.0 NET FRAMEWORK! FIXED TO WORK WITH ALL VERSIONS UNCLUDING TREEVIEW! When a control is bound to this list it will only "see" the properties defined in the child interface. test: ---------------------------------------------- using System; using System.Collections.Generic; using System.Windows.Forms; using Telerik.WinControls.UI; namespace Lab.Grid { public partial class GridInterfaceInheritanceBinding : MainForm { private RadGridView gridView = new RadGridView(); private RadDropDownList comboBox = new RadDropDownList(); public GridInterfaceInheritanceBinding() { InitializeComponent(); gridView.Dock = DockStyle.Fill; gridView.Parent = this; gridView.BringToFront(); comboBox.Width = 200; comboBox.Parent = this; comboBox.BringToFront(); Random r = new Random(DateTime.Now.Second); List<ITelephone> phones = new List<ITelephone>(); for (int i = 0; i < 10; i++) { Telephone phone = new Telephone(); phone.Type = r.Next(3) + 1; phone.Primary = true; phone.PRI = i; phone.ParentType = 1; phone.Number = "1-800-555-555" + i.ToString(); phone.LockedOn = null; phone.LockedBy = null; phone.Locked = 0; phone.ID = new Guid(); phone.Deleted = false; phone.Archived = false; phone.Active = true; phones.Add(phone); } comboBox.DisplayMember = "Number"; comboBox.ValueMember = "PRI"; comboBox.DataSource = phones; gridView.DataSource = phones; } } public interface IBusinessObject { long PRI { get; set; } bool Active { get; set; } bool Archived { get; set; } bool Deleted { get; set; } byte Locked { get; set; } string LockedBy { get; set; } DateTime? LockedOn { get; set; } Guid ID { get; set; } } public interface IStandardLinkTable : IBusinessObject { long? ParentPRI { get; set; } int? ParentType { get; set; } int? Type { get; set; } } public interface ITelephone : IStandardLinkTable { string Number { get; set; } bool? Primary { get; set; } } public class Telephone : IBusinessObject, ITelephone { public System.Guid ID { get; set; } private System.Guid _originalid { get; set; } public System.Int64 PRI { get; set; } private System.Int64 _originalpri { get; set; } public System.Byte Class { get; set; } private System.Byte _originalclass { get; set; } public System.Int64? ParentPRI { get; set; } private System.Int64? _originalparentpri { get; set; } public System.Int32? ParentType { get; set; } private System.Int32? _originalparenttype { get; set; } public System.Int32? Type { get; set; } private System.Int32? _originaltype { get; set; } public System.String Number { get; set; } private System.String _originalnumber { get; set; } public System.Boolean? Primary { get; set; } private System.Boolean? _originalprimary { get; set; } public System.Byte Locked { get; set; } private System.Byte _originallocked { get; set; } public System.String LockedBy { get; set; } private System.String _originallockedby { get; set; } public System.DateTime? LockedOn { get; set; } private System.DateTime? _originallockedon { get; set; } public System.Boolean Active { get; set; } private System.Boolean _originalactive { get; set; } public System.Boolean Archived { get; set; } private System.Boolean _originalarchived { get; set; } public System.Boolean Deleted { get; set; } private System.Boolean _originaldeleted { get; set; } internal void SetInitialValues() { _originalid = ID; _originalpri = PRI; _originalclass = Class; _originalparentpri = ParentPRI; _originalparenttype = ParentType; _originaltype = Type; _originalnumber = Number; _originalprimary = Primary; _originallocked = Locked; _originallockedby = LockedBy; _originallockedon = LockedOn; _originalactive = Active; _originalarchived = Archived; _originaldeleted = Deleted; } } }
Currently developers can localize the names of the properties. They should be able to localize the descriptions as well.
Currently exporters do not respect the RightToLeft property of RadGridView and export the data always as left to right.
RadGridView - does not scroll correctly when AutoSizeRows and EnableFastScrolling are set to true. Code to reproduce: radGridView1.BeginUpdate(); radGridView1.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill; radGridView1.AutoSizeRows = true; radGridView1.EnableFastScrolling = true; DataTable dt = new DataTable(); dt.Columns.Add("A"); dt.Columns.Add("B"); dt.Columns.Add("C"); for (int i = 0; i < 50; i++) { string[] array = new string[3]; array[0] = i.ToString(); array[1] = i.ToString(); array[2] = i.ToString(); dt.Rows.Add(array); } radGridView1.DataSource = dt; radGridView1.EndUpdate();
How to handle this case: Subscribe to the CellValidating event and add logic for validation. For example: If e.Value Is Nothing Then e.Cancel = True End If Additionally you can handle the DataError event to handle cases where users are trying to submit invalid data through the grid to its data source. Finally, you can subscribe to the ContextMenuOpening event where to hide the "Clear value" item from context menu with following code snippet: For i As Integer = 0 To e.ContextMenu.Items.Count - 1 If e.ContextMenu.Items(i).Text = "Clear Value" Then e.ContextMenu.Items(i).Visibility = Telerik.WinControls.ElementVisibility.Collapsed End If Next
FIX. RadGridViiew - HierarchyLevel property shows incorrect hierarchy level for GridNewRowElement in grid with hierarchy.