Workaround: check the attached project
Workaround: List<object> list = new List<object>(array); this.radGridView1.DataSource = list;
The ActiveEditor property of the event arguments of the CellEndEdit event always returns null. The property should be either removed or made return proper data.
1 .Add RadgridView to Form 2. Set "AllowSearchRow" property to True 3. Add a row and place the word "Gießen" (name of a city) in a column 4. When the program is running type "Giessen" in the AutoSearch Row. After the "n" an ArgumentException is thrown.
To reproduce: - Enable the alternating row color and change the current cell as fast as you can. Workaround: void radGridView1_RowFormatting(object sender, RowFormattingEventArgs e) { if (e.RowElement.RowInfo.Index %2 ==0) { e.RowElement.DrawFill = true; e.RowElement.GradientStyle = GradientStyles.Solid; e.RowElement.BackColor = Color.Aqua; } else { e.RowElement.ResetValue(LightVisualElement.BackColorProperty, ValueResetFlags.Local); e.RowElement.ResetValue(LightVisualElement.GradientStyleProperty, ValueResetFlags.Local); e.RowElement.ResetValue(LightVisualElement.DrawFillProperty, ValueResetFlags.Local); } }
To reproduce: use DataAccess to connect to Northwind.Customer table: public Form1() { InitializeComponent(); EntitiesModel1 context = new EntitiesModel1(); var query = (from c in context.Customers where c.CustomerID.Contains("f") select c).ToList(); this.radGridView1.DataSource = query; SortDescriptor descriptor = new SortDescriptor(); descriptor.PropertyName = "CustomerID"; descriptor.Direction = ListSortDirection.Ascending; this.radGridView1.MasterTemplate.SortDescriptors.Add(descriptor); this.radGridView1.CurrentRow = this.radGridView1.Rows.Last(); } Run the project and press the Delete key several times. Workaround: use BindingSource as RadGridView.DataSource: BindingSource bs = new BindingSource(); bs.DataSource = query; this.radGridView1.DataSource = bs;
1. Create a new project and open a form at design mode. 2. Drop RadGridView component on the form. 3. Bind it to some data source. 4. Open the property builder. 5. Select a column and change its name property. You will see that the column name remains the same in the columns list located at left.
To reproduce: GridViewHyperlinkColumn col = new GridViewHyperlinkColumn(); col.FieldName = "Name"; col.HyperlinkOpenAction = HyperlinkOpenAction.DoubleClick; Workaround: Use the CellDoubleClick event: void radGridView1_CellDoubleClick(object sender, GridViewCellEventArgs e) { if (e.Column is GridViewHyperlinkColumn) { string hyperlink = e.Value.ToString(); } }
How to reproduce: public partial class Form1 : Form { public Form1() { InitializeComponent(); this.radGridView1.DataSource = this.GetData(); this.Load += Form1_Load; } private void Form1_Load(object sender, EventArgs e) { this.radGridView1.SynchronizeCurrentRowInSplitMode = true; this.radGridView1.SplitMode = Telerik.WinControls.UI.RadGridViewSplitMode.Vertical; } private DataTable GetData() { DataTable dt = new DataTable(); 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("Name " + i, i, DateTime.Now.AddMinutes(i), i % 2 == 0 ? true : false); } return dt; } } Workaround: public partial class Form1 : Form { public Form1() { InitializeComponent(); this.radGridView1.DataSource = this.GetData(); this.radGridView1.ViewDefinition = new SplitViewDefintion(); this.Load += Form1_Load; } private void Form1_Load(object sender, EventArgs e) { this.radGridView1.SynchronizeCurrentRowInSplitMode = true; this.radGridView1.SplitMode = Telerik.WinControls.UI.RadGridViewSplitMode.Vertical; } private DataTable GetData() { DataTable dt = new DataTable(); 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("Name " + i, i, DateTime.Now.AddMinutes(i), i % 2 == 0 ? true : false); } return dt; } } public class SplitViewDefintion : TableViewDefinition { public override IRowView CreateViewUIElement(GridViewInfo viewInfo) { return new MyGridTableElement(); } } public class MyGridTableElement : GridTableElement { protected override RadScrollBarElement CreateScrollBarElement() { return new MyRadScrollbarElement(); } } public class MyRadScrollbarElement : RadScrollBarElement { protected override Type ThemeEffectiveType { get { return typeof(RadScrollBarElement); } } protected override void OnMouseDown(MouseEventArgs e) { if (Cursor.Current == Cursors.SizeWE || Cursor.Current == Cursors.SizeNS) { return; } base.OnMouseDown(e); } }
To reproduce: 1. Bind RadGridView to a collection of business objects where one of the properties is Nullable<DateTime>. 2. Leave one of the items with an empty date (null value). 3. Copy the entire row and try to paste in one of the grid rows. The FormatException is thrown. Sub New() InitializeComponent() Dim items As New List(Of Item) items.Add(New Item(1, DateTime.Now.AddDays(2), "Item1")) items.Add(New Item(2, Nothing, "Item2")) items.Add(New Item(3, DateTime.Now.AddDays(4), "Item3")) items.Add(New Item(4, DateTime.Now.AddDays(5), "Item4")) Me.RadGridView1.DataSource = items Me.RadGridView1.AutoSizeColumnsMode = Telerik.WinControls.UI.GridViewAutoSizeColumnsMode.Fill End Sub Public Class Item Private _id As Integer Private _createdOn As Nullable(Of DateTime) Private _title As String Public Sub New(id As Integer, createdOn As Nullable(Of DateTime), title As String) Me._id = id Me._createdOn = createdOn Me._title = title End Sub Public Property Id() As Integer Get Return _id End Get Set(ByVal value As Integer) _id = value End Set End Property Public Property CreatedOn() As Nullable(Of DateTime) Get Return _createdOn End Get Set(ByVal value As Nullable(Of DateTime)) _createdOn = value End Set End Property Public Property Title() As String Get Return _title End Get Set(ByVal value As String) _title = value End Set End Property End Class Workaround: use a TypeConverter Sub New() InitializeComponent() Dim items As New List(Of Item) items.Add(New Item(1, DateTime.Now.AddDays(2), "Item1")) items.Add(New Item(2, Nothing, "Item2")) items.Add(New Item(3, DateTime.Now.AddDays(4), "Item3")) items.Add(New Item(4, DateTime.Now.AddDays(5), "Item4")) Me.RadGridView1.DataSource = items Me.RadGridView1.AutoSizeColumnsMode = Telerik.WinControls.UI.GridViewAutoSizeColumnsMode.Fill DirectCast(Me.RadGridView1.Columns(1), GridViewDateTimeColumn).DataTypeConverter=New NullableDateTimeConverter() End Sub Public Class NullableDateTimeConverter Inherits TypeConverter Public Overrides Function CanConvertFrom(ByVal context As ITypeDescriptorContext, ByVal sourceType As Type) As Boolean Return sourceType.Equals(GetType(String)) End Function Public Overrides Function ConvertFrom(ByVal context As ITypeDescriptorContext, ByVal culture As CultureInfo, ByVal value As Object) As Object Dim parsedDate As DateTime If DateTime.TryParse(value.ToString(), parsedDate) Then Return parsedDate End If Return Nothing End Function End Class Public Class Item Private _id As Integer Private _createdOn As Nullable(Of DateTime) Private _title As String Public Sub New(id As Integer, createdOn As Nullable(Of DateTime), title As String) Me._id = id Me._createdOn = createdOn Me._title = title End Sub Public Property Id() As Integer Get Return _id End Get Set(ByVal value As Integer) _id = value End Set End Property Public Property CreatedOn() As Nullable(Of DateTime) Get Return _createdOn End Get Set(ByVal value As Nullable(Of DateTime)) _createdOn = value End Set End Property Public Property Title() As String Get Return _title End Get Set(ByVal value As String) _title = value End Set End Property End Class
After a couple clicks, grid's context menu becomes unresponsive when using RadGridView through remote connection and Windows 7
The events are fired in the following order: UserAddingRow, EditorRequired, UserAddedRow eventfired when the new is pinned at the bottom and TAB key is processed. Workaround: public class FixGridNewRowBehavior : GridNewRowBehavior { protected override bool ProcessTabKey(System.Windows.Forms.KeyEventArgs keys) { bool isInEditMode = this.EditorManager.IsInEditMode; if (isInEditMode) { IGridNavigator navigator = GridViewElement.Navigator; bool isLeftNavigation = navigator.IsFirstColumn(GridViewElement.CurrentColumn) && keys.Shift; bool isRightNavigation = navigator.IsLastColumn(GridViewElement.CurrentColumn) && !keys.Shift; if (isLeftNavigation || isRightNavigation) { this.GridViewElement.EndEdit(); } if (isLeftNavigation) { navigator.SelectLastColumn(); } else if (isRightNavigation) { navigator.SelectFirstColumn(); } if (isLeftNavigation || isRightNavigation) { GridViewElement.BeginEdit(); return true; } } return base.ProcessTabKey(keys); } } BaseGridBehavior gridBehavior = this.radGridView1.GridBehavior as BaseGridBehavior; gridBehavior.UnregisterBehavior(typeof(GridViewNewRowInfo)); gridBehavior.RegisterBehavior(typeof(GridViewNewRowInfo), new FixGridNewRowBehavior());
To reproduce: Sub New() InitializeComponent() Dim dt As New DataTable() dt.Columns.Add("Name", GetType(String)) dt.Columns.Add("Price", GetType(Decimal)) dt.Columns.Add("Id", GetType(Integer)) dt.Columns.Add("ActivatedOn", GetType(DateTime)) For i As Integer = 0 To 4 dt.Rows.Add("Item" & i, i * 0.25, i, DateTime.Now.AddHours(i)) Next Me.RadGridView1.DataSource = dt Me.RadGridView1.Columns("Id").[ReadOnly] = True Me.RadGridView1.AutoSizeColumnsMode = Telerik.WinControls.UI.GridViewAutoSizeColumnsMode.Fill AddHandler Me.RadGridView1.DefaultValuesNeeded, AddressOf radGridView1_DefaultValuesNeeded Me.RadGridView1.NewRowEnterKeyMode = RadGridViewNewRowEnterKeyMode.EnterMovesToLastAddedRow End Sub Private Sub radGridView1_DefaultValuesNeeded(sender As Object, e As GridViewRowEventArgs) e.Row.Cells("Id").Value = Me.radGridView1.Rows.Count e.Row.Cells("ActivatedOn").Value = DateTime.Now End Sub Select the read-only cell inside the new row and press Enter. You will notice that two duplicated rows are added. Workaround: handle the RadGridView.PreviewKeyDown event and change the current column to one that is not read-only AddHandler Me.RadGridView1.PreviewKeyDown, AddressOf GridPreviewKeyDown Private Sub GridPreviewKeyDown(sender As Object, e As PreviewKeyDownEventArgs) If e.KeyCode = Keys.Enter Then Me.RadGridView1.CurrentColumn = Me.RadGridView1.Columns(0) Me.RadGridView1.BeginEdit() End If End Sub
1. Create a new project with RadGridView and setup 2 level hierarchy. 2. Add a checkbox column at the second level and set its pinned state to Left. 3. Run the application. 4. Expand the first row and click on the checkbox. Be sure that RadGridView contains enough columns in its child view to show horizontal scrollbar. Workaround: create a custom view definition public class CustomTableViewDefinition : TableViewDefinition { public override IRowView CreateViewUIElement(GridViewInfo viewInfo) { CustomTableElement table = new CustomTableElement(); return table; } } public class CustomTableElement : GridTableElement { protected override Type ThemeEffectiveType { get { return typeof(GridTableElement); } } public override bool EnsureCellVisible(GridViewRowInfo rowInfo, GridViewColumn column) { if (column.IsPinned) { return true; } return base.EnsureCellVisible(rowInfo, column); } } Set the view definition to the child template by using the ViewDefinition property this.gridViewDemoData.Templates[0].ViewDefinition = new CustomTableViewDefinition();
To reproduce: - Set the first column header text to "+R/S"; - Export the grid with spread export. Workaround: class MySpreadExportRenderer : SpreadExportRenderer { public override void SetCellSelectionValue(string text) { if (text == "+R/S") { var cellSelection = typeof(SpreadExportRenderer).GetField("cellSelection", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(this) as CellSelection; CellRange range = cellSelection.CellRanges.ElementAtOrDefault(0); CellValueFormat cvf = new CellValueFormat("@"); var worksheet = typeof(SpreadExportRenderer).GetField("worksheet", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(this) as Worksheet; worksheet.Cells[range.FromIndex.RowIndex, range.FromIndex.ColumnIndex].SetFormat(cvf); } base.SetCellSelectionValue(text); } }
Workaround: Use a custom editor and override IsModified method: class MyEditor : RadDropDownListEditor { public override bool IsModified { get { return true; } } } void radGridViewFilter_EditorRequired(object sender, EditorRequiredEventArgs e) { if (e.EditorType == typeof(RadDropDownListEditor)) { e.Editor = new MyEditor(); } }
Workaround the issue by using the DataBindingComplete event in the following manner: private GridViewRowInfo oldCurrentRow = null; protected override void OnLoad(EventArgs e) { this.radGridView1.DataBindingComplete += this.OnDataBindingComplete; this.oldCurrentRow = this.radGridView1.CurrentRow; this.radGridView1.DataSource = Telerik.Help.Data.GetDummyEmployees(0); } private void OnDataBindingComplete(object sender, Telerik.WinControls.UI.GridViewBindingCompleteEventArgs e) { if (this.oldCurrentRow != this.radGridView1.CurrentRow && this.radGridView1.RowCount == 0) { this.radGridView1.MasterTemplate.EventDispatcher.RaiseEvent<CurrentRowChangedEventArgs>(EventDispatcher.CurrentRowChanged, this.radGridView1.MasterTemplate, new CurrentRowChangedEventArgs(null, null)); } this.oldCurrentRow = null; }
To reproduce: - add a grid to the form and use the following code for its setup: radGridView2.Columns.Add("ID"); radGridView2.Columns.Add("Title"); radGridView2.MultiSelect = true; radGridView2.Columns[0].SortOrder = RadSortOrder.Ascending; radGridView2.ReadOnly = true; radGridView2.BeginUpdate(); for (int i = 0; i < 5; i++) { GridViewDataRowInfo row = new GridViewDataRowInfo(radGridView2.MasterTemplate.MasterViewInfo); row.Cells["ID"].Value = i; row.Cells["Title"].Value = "Title " + i; radGridView2.Rows.Add(row); } radGridView2.EndUpdate(true); radGridView2.Rows[0].IsCurrent = true; radGridView2.Rows[0].IsSelected= true; - Once the application is started, hold down the shift key and click the third row in the grid Expected result: the first three rows are selected Actual result: the last three rows are selected WORKAROUND: Use the BeginUpdate and EndUpdate methods of the TableElement, not the control: radGridView2.TableElement.BeginUpdate(); //add rows radGridView2.TableElement.EndUpdate(true);
To reproduce: bind the grid to self reference data source, and on a button click, Fill the TableAdapter Workaround: clear the relations to clear the cache and add them back after the adapter is filled: RadGridView1.Relations.Clear() Me.Table1TableAdapter.Fill(Me.Database8DataSet.Table1) Me.RadGridView1.Relations.AddSelfReference(Me.RadGridView1.MasterTemplate, "TaskID", "ParentTask")