I Have a RadGridView (ver 2009.Q3.SP1) and i am formating the rows backcolor using the following code:
| Private Sub RGVContacts_RowFormatting(ByVal sender As Object, ByVal e As Telerik.WinControls.UI.RowFormattingEventArgs) Handles RGVContacts.RowFormatting |
| If e.RowElement.IsOdd Then |
| e.RowElement.BackColor = Color.Moccasin |
| Else |
| e.RowElement.BackColor = Color.FloralWhite |
| End If |
| e.RowElement.DrawFill = True |
| End Sub |
After we have the mouse over a row, the row is chnaging color and after leaving the row does not return to its original color.
Also, we have the similar problem when selecting one row and then another. The previous selected row does not return to its original color.
Any help will be appreciated.
6 Answers, 1 is accepted
Thank you for your question. You can use AlternatingRowColor property when you want just to show rows with alternating color. Here is a sample:
Me.radGridView1.EnableAlternatingRowColor = True(DirectCast(Me.radGridView1.GridElement, GridTableElement)).AlternatingRowColor = Color.MoccasinHowever, if you want custom effects like a gradient color you have to handle RowFormatting event. The problem is that this event doesn't fire on mouse move. So, you have to handle this event too. Please consider the code snippet below:
Private oldHoveredElement As GridRowElementSub radGridView1_MouseMove(sender As Object, e As MouseEventArgs) Dim cell As GridCellElement = TryCast(Me.radGridView1.ElementTree.GetElementAtPoint(e.Location), GridCellElement) If cell <> Nothing Then If oldHoveredElement <> cell.RowElement Then If oldHoveredElement <> Nothing Then oldHoveredElement.UpdateInfo() End If oldHoveredElement = cell.RowElement oldHoveredElement.UpdateInfo() End If End IfEnd SubSub radGridView1_RowFormatting(sender As Object, e As RowFormattingEventArgs) If e.RowElement.RowVisualState = GridRowElement.RowVisualStates.Hovered OrElse e.RowElement.RowVisualState = GridRowElement.RowVisualStates.CurrentHovered OrElse e.RowElement.RowVisualState = GridRowElement.RowVisualStates.Current Then e.RowElement.ResetValue(LightVisualElement.BackColorProperty, ValueResetFlags.Local) e.RowElement.ResetValue(LightVisualElement.DrawFillProperty, ValueResetFlags.Local) e.RowElement.ResetValue(LightVisualElement.GradientStyleProperty, ValueResetFlags.Local) Else If e.RowElement.IsOdd Then e.RowElement.BackColor = Color.Moccasin Else e.RowElement.BackColor = Color.FloralWhite End If e.RowElement.DrawFill = True e.RowElement.GradientStyle = GradientStyles.Linear End IfEnd SubI hope this helps. If you have further questions, do not hesitate to ask.
Sincerely yours,
Jackthe Telerik team
Instantly find answers to your questions on the new Telerik Support Portal.
Watch a video on how to optimize your support resource searches and check out more tips on the blogs.
I am using VB 2008 .Net framework 3.5
After adding your code for MouseMove i have the following error:
Error 1 Operator '<>' is not defined for types 'Telerik.WinControls.UI.GridRowElement' and 'Telerik.WinControls.UI.GridRowElement'. C:\CPhone4.2\CPhoneClient\FrmMain.vb 123 16 CPhoneClient
at the line: If oldHoveredElement <> Cell.RowElement Then
What is missing from my code or my enviroment ?
| Private Sub RGVContacts_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles RGVContacts.MouseMove |
| Dim Cell As GridCellElement = TryCast(Me.RGVContacts.ElementTree.GetElementAtPoint(e.Location), GridCellElement) |
| If Not IsNothing(Cell) Then |
| If oldHoveredElement <> Cell.RowElement Then |
| If Not IsNothing(oldHoveredElement) Then oldHoveredElement.UpdateInfo() |
| oldHoveredElement = Cell.RowElement |
| oldHoveredElement.UpdateInfo() |
| End If |
| End If |
| End Sub |
Also, we have similar problem when selecting one row and then another.
The previous selected row does not return to its original color.
Thank you
George
You have to change the '<>' comparison with Equals. The following code should work:
Private Sub RadGridView1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles RadGridView1.MouseMove Dim cell As GridCellElement = TryCast(Me.RadGridView1.ElementTree.GetElementAtPoint(e.Location), GridCellElement) If cell IsNot Nothing Then If Not cell.RowElement.Equals(oldHoveredElement) Then If oldHoveredElement IsNot Nothing Then oldHoveredElement.UpdateInfo() End If oldHoveredElement = cell.RowElement oldHoveredElement.UpdateInfo() End If End IfEnd SubI can't provide a solution with code when using RadGridView in multi-row selection mode. In this case it will be better to create a custom theme with Visual Style Builder. Nevertheless, we will improve our API in future to support this case.
I hope this helps. Should you have more questions, please write back.
Greetings,Jack
the Telerik team
Instantly find answers to your questions on the new Telerik Support Portal.
Watch a video on how to optimize your support resource searches and check out more tips on the blogs.
Thank you for your support.
The provided code solves the issue concerning mouse over.
Since, there is no solution yet, for selection mode in multi-row grid, we may choose to use the simple coloring ability without gradient as you suggest to your first answer. What property changes the basic row color ? (You are giving us only the alternate color property).
Thank you
George
There is no property that controls the default row background color. You have to handle RowFormatting event or modify the theme. However, I found a way to implement gradient alternating row color in multi select mode with code. You should override the default data row element. Please consider the sample below:
Public Class MyDataRow Inherits GridDataRowElement Public Overloads Overrides Sub UpdateInfo() MyBase.UpdateInfo() If Me.RowVisualState = RowVisualStates.None Then If Me.IsOdd Then Me.BackColor = Color.Moccasin Me.BackColor2 = Color.Beige Else Me.BackColor = Color.FloralWhite Me.BackColor2 = Color.FloralWhite End If Me.DrawFill = True Me.GradientStyle = GradientStyles.Linear Else ResetValue(LightVisualElement.BackColorProperty, ValueResetFlags.Local) ResetValue(LightVisualElement.BackColor2Property, ValueResetFlags.Local) ResetValue(LightVisualElement.DrawFillProperty, ValueResetFlags.Local) ResetValue(LightVisualElement.GradientStyleProperty, ValueResetFlags.Local) End If End Sub Protected Overloads Overrides Sub OnPropertyChanged(ByVal e As RadPropertyChangedEventArgs) MyBase.OnPropertyChanged(e) If e.Property.Equals(GridRowElement.RowVisualStateProperty) Then UpdateInfo() End If End SubEnd ClassPrivate Sub RadGridView1_CreateRow(ByVal sender As Object, ByVal e As Telerik.WinControls.UI.GridViewCreateRowEventArgs) Handles RadGridView1.CreateRow If e.RowType.Equals(GetType(GridDataRowElement)) Then e.RowType = GetType(MyDataRow) End IfEnd SubIf you need further assistance, I will be glad to help.
Greetings,Jack
the Telerik team
Instantly find answers to your questions on the new Telerik Support Portal.
Watch a video on how to optimize your support resource searches and check out more tips on the blogs.
The provided solution works fine.