How to format individual cells or rows of a VB.NET DataGrid?

G

Guest

I know that you can format a grid and its columns using DataGridTableStyle
and DataGridTextBoxColumn in VB.NET. But can you change the format of the
individual rows, or even cells, to something other than the default?

For instance, I have a datagrid displaying a list of products in stock. I
want to highlight the products in red if the product is out of stock. How
should I implement this?

Please let me know if you have the answer. Thanks.
 
M

Mona

Hi Richard,

You can do this by inheriting DataGridTextBoxColumn and overriding the Paint
method to conditionally
change the cell format. Here is an example that colors cells based on their
value:

Public Class DataGridColoredTextBoxColumn
Inherits DataGridTextBoxColumn
Public Sub New()
End Sub
Protected Overloads Overrides Sub Paint(ByVal g As Graphics, ByVal
bounds As Rectangle, ByVal source As CurrencyManager, ByVal rowNum As
Integer, ByVal backBrush As Brush, ByVal foreBrush As Brush, ByVal
alignToRight As Boolean)

Try
Dim o As Object
o = Me.GetColumnValueAtRow(source, rowNum)
If (Not (o) Is Nothing) Then
Dim c As Char
c = CType(o, String).Substring(0, 1)
If (c = "Test") Then

backBrush = new SolidBrush(Color.Red);
foreBrush= new SolidBrush(Color.White);
End If
End If
Catch ex As Exception
' empty catch
Finally
MyBase.Paint(g, bounds, source, rowNum, backBrush,
foreBrush, alignToRight)
End Try
End Sub
End Class

Hope this helps.
Thanks
Mona[Grapecity]
 
G

Guest

Thanks for the help. It's working great.

My next question is: How do I change the format of other cells on the same
row?

As in your example, if the first cell of current row contains "Test", the
background color of the first cell wil be changed to RED, and the font color
is changed to WHITE. How do I propagate the same format to the rest cells
basing on the value of the FIRST cell?

Richard


Mona said:
Hi Richard,

You can do this by inheriting DataGridTextBoxColumn and overriding the Paint
method to conditionally
change the cell format. Here is an example that colors cells based on their
value:

Public Class DataGridColoredTextBoxColumn
Inherits DataGridTextBoxColumn
Public Sub New()
End Sub
Protected Overloads Overrides Sub Paint(ByVal g As Graphics, ByVal
bounds As Rectangle, ByVal source As CurrencyManager, ByVal rowNum As
Integer, ByVal backBrush As Brush, ByVal foreBrush As Brush, ByVal
alignToRight As Boolean)

Try
Dim o As Object
o = Me.GetColumnValueAtRow(source, rowNum)
If (Not (o) Is Nothing) Then
Dim c As Char
c = CType(o, String).Substring(0, 1)
If (c = "Test") Then

backBrush = new SolidBrush(Color.Red);
foreBrush= new SolidBrush(Color.White);
End If
End If
Catch ex As Exception
' empty catch
Finally
MyBase.Paint(g, bounds, source, rowNum, backBrush,
foreBrush, alignToRight)
End Try
End Sub
End Class

Hope this helps.
Thanks
Mona[Grapecity]



Richard said:
I know that you can format a grid and its columns using DataGridTableStyle
and DataGridTextBoxColumn in VB.NET. But can you change the format of the
individual rows, or even cells, to something other than the default?

For instance, I have a datagrid displaying a list of products in stock. I
want to highlight the products in red if the product is out of stock. How
should I implement this?

Please let me know if you have the answer. Thanks.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Similar Threads


Top