Afficher une image dans une cellule d'un datagridview lié à un dataset

Soyez le premier à donner votre avis sur cette source.

Vue 15 611 fois - Téléchargée 1 663 fois

Description

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

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

mmol
Messages postés
2
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
16 octobre 2008
-
j'ai pas comprit comment faire marché se code la .
merci de plus d'explication
wael1986
Messages postés
2
Date d'inscription
mercredi 22 octobre 2008
Statut
Membre
Dernière intervention
21 février 2012
-
Merci ce code est géniale dans une datagridview simple sans datasource mais en cas d'ajouter une colonne de type DataGridViewImageColumn dans une datagridview qui a un datasource dans ce cas je ne peut pas modifier la valeur du cellule ajouté. Avez vous une solution pour ce probléme.merci.
KiteAtao
Messages postés
4
Date d'inscription
lundi 2 août 2004
Statut
Membre
Dernière intervention
6 avril 2011
-
Merci bien pour ce code. Cela marche impecable :-)
Je n'ai pas compris toute les lignes de code mais j'ai reussi à l'adapter dans mon application.

Encore merci.

A Noste Kêe,
Richard.

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.