Cette classe personnalise une colonne d'un datagridview pour afficher une image dans une cellule en fonction de sa valeur
Je suis débutant et c'est mon premier post
Si ca peut aider quelqu'un car je n'ai rien trouvé de concret sur le web
Utilisation:
Dim dgvDesignation As New DataGridViewImageColumn
Dim iDesignation As Integer
iDesignation = Me.dgvContenu.Columns.Add(dgvDesignation)
Me.dgvContenu.Columns(iDesignation).DefaultCellStyle.ForeColor = Color.Transparent
Me.dgvContenu.Columns(iDesignation).DataPropertyName = "Designation"
Me.dgvContenu.Columns(iDesignation).Name = "Désignation"
Me.dgvContenu.Columns(iDesignation).Width = 140
Me.dgvContenu.DefaultCellStyle.WrapMode = DataGridViewTriState.True
Source / Exemple :
Public Class DataGridViewImageColumn
Inherits DataGridViewColumn
Public Sub New()
MyBase.New(New DataGridViewAfficheImage)
End Sub
Public Overrides Property CellTemplate() As DataGridViewCell
Get
Return MyBase.CellTemplate
End Get
Set(ByVal value As DataGridViewCell)
' Ensure that the cell used for the template is a CalendarCell.
If Not (value Is Nothing) AndAlso _
Not value.GetType().IsAssignableFrom(GetType(DataGridViewAfficheImage)) _
Then
Throw New InvalidCastException("Must be a DataGridViewPercentageCell")
End If
MyBase.CellTemplate = value
End Set
End Property
End Class
Public Class DataGridViewAfficheImage
Inherits DataGridViewTextBoxCell
Public Sub New()
Me.Style.Format = "0%"
End Sub
Public Overrides ReadOnly Property EditType() As System.Type
Get
Return Nothing
End Get
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)
Dim p As Double = 0
If value IsNot Nothing AndAlso _
Not IsDBNull(value) AndAlso _
IsNumeric(value) Then
p = CDbl(value)
End If
MyBase.Paint(graphics, clipBounds, cellBounds, rowIndex, cellState, value, formattedValue, errorText, cellStyle, advancedBorderStyle, DataGridViewPaintParts.Background Or DataGridViewPaintParts.Border Or DataGridViewPaintParts.ErrorIcon Or DataGridViewPaintParts.Focus Or DataGridViewPaintParts.SelectionBackground)
Dim image1 As Bitmap
image1 = My.Resources.player_fwd
Dim image2 As Bitmap
image2 = My.Resources._5days
Dim newImage As Image
' Create image.
If value = 45 Then
newImage = image1
MyBase.ToolTipText = ("image 1")
Else
newImage = image2
MyBase.ToolTipText = ("image 2")
End If
' Create coordinates for upper-left corner of image.
Dim x As Single = cellBounds.X + 4
Dim y As Single = cellBounds.Y + 2
Dim destRect As New Rectangle(x, y, 16, 16)
graphics.DrawImage(newImage, destRect)
MyBase.Paint(graphics, clipBounds, cellBounds, rowIndex, cellState, value, formattedValue, errorText, cellStyle, advancedBorderStyle, DataGridViewPaintParts.None Or DataGridViewPaintParts.ContentForeground)
End Sub
End Class
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.