O Microsoft Excel permite colocar comentários nas células, de modo a guardar informações não visíveis(escondidas), mas que quando o ponteiro do rato está sobre a respectiva célula, o comentário é exibido sobre a forma de Tooltip.
Este comentário é representado por um pequeno triângulo, de cor vermelha, ao canto superior direito da célula.
A DataGridView é um controlo muito semelhante às células do Microsoft Excel, mas como é natural, esta possibilidade não está contemplada. A DataGridView não é uma folha de calculo!
No entanto, poderá ser útil, reproduzir esta funcionalidade em uma DataGridView, para guardar alguns comentários, notas pessoais, etc.
Para implementarmos este tipo de funcionalidade, podemos criar um novo tipo de coluna – DataGridViewColumnComment - e um novo tipo de célula -DataGridViewCellComment. Depois, no evento Paint(), criamos o triângulo ao canto superior direito da respectiva célula.
O resultado, será uma classe como esta:
''' <summary>
''' Cria um novo tipo de coluna
''' </summary>
<System.Diagnostics.DebuggerStepThrough()> _
Public Class DataGridViewColumnComment
Inherits DataGridViewColumn
Public Sub New()
MyBase.New(New DataGridViewCellComment())
End Sub
End Class
''' <summary>
''' Cria uma nova TextBoxCell que irá permitir
''' adicionar comentários e mostrar como ToolTipText
''' </summary>
<System.Diagnostics.DebuggerStepThrough()> _
Public Class DataGridViewCellComment
Inherits DataGridViewTextBoxCell
Private m_Comment As String
''' <summary>
''' Guarda a informação dos comentários
''' </summary>
Public Property Comment() As String
Get
Return m_Comment
End Get
Set(ByVal value As String)
m_Comment = value
' Define o texto para a tooltip
If m_Comment IsNot Nothing AndAlso m_Comment.Length <> 0 Then
Me.ToolTipText = m_Comment
Else
Me.ToolTipText = String.Empty
End If
End Set
End Property
Protected Overrides Sub Paint(ByVal graphics As System.Drawing.Graphics, _
ByVal clipBounds As System.Drawing.Rectangle, _
ByVal cellBounds As System.Drawing.Rectangle, _
ByVal rowIndex As Integer, _
ByVal cellState As System.Windows.Forms.DataGridViewElementStates, _
ByVal value As Object, _
ByVal formattedValue As Object, _
ByVal errorText As String, _
ByVal cellStyle As System.Windows.Forms.DataGridViewCellStyle, _
ByVal advancedBorderStyle As _
System.Windows.Forms.DataGridViewAdvancedBorderStyle, _
ByVal paintParts As System.Windows.Forms.DataGridViewPaintParts)
' Desenha a célula (processo normal)
MyBase.Paint(graphics, clipBounds, cellBounds, rowIndex, _
cellState, value, formattedValue, errorText, _
cellStyle, advancedBorderStyle, paintParts)
' Caso tenha algum comentário, desenha o triângulo
If Me.Comment IsNot Nothing AndAlso Me.Comment.Length <> 0 Then
Dim rect As Rectangle = cellBounds
Dim points As New List(Of Point)
points.Add(New Point(rect.Right - 8, rect.Top))
points.Add(New Point(rect.Right, rect.Top + 8))
points.Add(New Point(rect.Right, rect.Top))
graphics.FillPolygon(Brushes.Red, points.ToArray)
End If
End Sub
End Class
Depois, para adicionar colunas à DataGridView:
Dim col As New DataGridViewColumnComment
col.Name = "Nova Coluna"
col.HeaderText = "Nova Coluna"
Me.DataGridView1.Columns.Add(col)
Finalmente, para inserir ou remover comentários, é apenas necessário altera a propriedade Comment. Colocando qualquer String, o comentário é definido, caso contrário, é removido.
' Posição na DataGridView
Dim row As Integer = 0
Dim col As Integer = 0
' Converte a célula para o tipo criado
Dim cell As DataGridViewCellComment = _
DirectCast(Me.DataGridView1(col, row), DataGridViewCellComment)
' Define um comentário para a célula. Para remover era necessário
' apenas definir como String.Empty ou ""
cell.Comment = "http://vbtuga.blogspot.com/"
' Obriga a célula, agora com comentário, a actualizar
Me.DataGridView1.InvalidateCell(cell)
Um exemplo simples, que mostra como colocar um comentário numa célula, mas acima de tudo como podemos criar células personalizadas, e adiciona-las à DataGridView.
3 comentários:
Gostei, simples e prático
Oi Paulino
andei lendo alguns artigos do blog e achei interessante este sobre colocar um comentario numa celula.
Tentei utilizar num pequeno programa que estou fazendo, mas não deu como pretendo.
Tenho a Datagridview com os dados, mas não pretendo adicionar mais nenhuma coluna, ou seja aplicar o comentario numa celula ja existente.
Como fazer?
O exemplo do blog funciona bem na coluna que adicionamos
Obrigado pela atenção
http://www.portugal-a-programar.org/forum/index.php/topic,44401.0.html
Enviar um comentário