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.Moccasin
However, 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
GridRowElement
Sub
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
If
End
Sub
Sub
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
If
End
Sub
I 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
If
End
Sub
I 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
Sub
End
Class
Private
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
If
End
Sub
If 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.