IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Ajouter une image dans un DGV


Sujet :

VB.NET

  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 263
    Points : 148
    Points
    148
    Par défaut Ajouter une image dans un DGV
    Bonjour,

    Alors dans mon programme, j'ai un DGV qui est lié à une dataTable via un BlindingSource classique (sans image). J'ai reussi à réaliser un filtre sans probleme jusqu'au moment ou j'ai une colonne de mon DGV qui est une colonne Image. J'ai trouvé une solution pour ajouter cette colonne image avec les images que je veux mais lorsque je me en marche mon filtre, mes images disparaissent car elles sont pas enregistrer dans ma DataTable.

    Voila mon code qui m'ajoute mes images de manière classique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
        Private Sub frmDGV_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            RemplirDico()
            TableForDgv()
            AjouterColonneImage()
            AjouterImageDansDGV()
        End Sub
        Private Sub AjouterColonneImage()
            Dim ColImg As New DataGridViewImageColumn()
            DataGridView1.Columns.Insert(0, ColImg)
        End Sub
        Private Sub AjouterImageDansDGV()
            For i As Integer = 0 To DataGridView1.RowCount - 1
                If DataGridView1.Rows(i).Cells(3).EditedFormattedValue = "Auto" Then
                    DataGridView1.Rows(i).Cells(0).Value = imgListPrio.Images(0)
                ElseIf DataGridView1.Rows(i).Cells(3).EditedFormattedValue = "Manu" Then
                    DataGridView1.Rows(i).Cells(0).Value = imgListPrio.Images(1)
                ElseIf DataGridView1.Rows(i).Cells(3).EditedFormattedValue = "Erreur" Then
                    DataGridView1.Rows(i).Cells(0).Value = imgListPrio.Images(2)
                End If
            Next
        End Sub
    Je voudrai bien pouvoir mettre directement mes images dans ma DataTable et mon BlindingSource pour que mon filtre marche a 100%.

    Voila le code de ma nouvelle approche :

    Propriété Image dans ma classe Alarme dans mon module en plus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
            Private msImg As Image
            Public Property Img() As Image
                Get
                    Return msImg
                End Get
     
                Set(ByVal value As Image)
                    msImg = value
                End Set
            End Property
    Mon Dico est chargé avec les images :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    Private Sub RemplirDico()
            Dim Alarme1 As New Alarme
            Alarme1.TimeDate = Now.DayOfYear
            Alarme1.TimeDate = Now.Hour
            Alarme1.Degre = "Auto"
            Alarme1.Evenement = "1"
            Alarme1.Img = imgListPrio.Images(0)
            DicoTest.Add(Alarme1.Evenement, Alarme1)
     
            Dim Alarme2 As New Alarme
            Alarme2.TimeDate = Now.DayOfYear
            Alarme2.TimeDate = Now.Hour
            Alarme2.Degre = "Auto"
            Alarme2.Evenement = "2"
            Alarme2.Img = imgListPrio.Images(0)
            DicoTest.Add(Alarme2.Evenement, Alarme2)
     
            Dim Alarme3 As New Alarme
            Alarme3.TimeDate = Now.DayOfYear
            Alarme3.TimeDate = Now.Hour
            Alarme3.Degre = "Manu"
            Alarme3.Evenement = "3"
            Alarme3.Img = imgListPrio.Images(1)
            DicoTest.Add(Alarme3.Evenement, Alarme3)
     
            Dim Alarme4 As New Alarme
            Alarme4.TimeDate = Now.DayOfYear
            Alarme4.TimeDate = Now.Hour
            Alarme4.Degre = "Manu"
            Alarme4.Evenement = "4"
            Alarme4.Img = imgListPrio.Images(1)
            DicoTest.Add(Alarme4.Evenement, Alarme4)
     
            Dim Alarme5 As New Alarme
            Alarme5.TimeDate = Now.DayOfYear
            Alarme5.TimeDate = Now.Hour
            Alarme5.Degre = "Erreur"
            Alarme5.Evenement = "5"
            Alarme5.Img = imgListPrio.Images(2)
            DicoTest.Add(Alarme5.Evenement, Alarme5)
        End Sub
    Ma procédure qui permet de remplir de DataTable, BlindingSource et DGV :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
        Private Sub TableForDgv()
            Dim ColImg As DataColumn = New DataColumn()
            ColImg.ColumnName = ""
            dtFromGrid.Columns.Add(ColImg)
            Dim ColDate As DataColumn = New DataColumn()
            ColDate.ColumnName = "Date"
            dtFromGrid.Columns.Add(ColDate)
            Dim ColHeure As DataColumn = New DataColumn()
            ColHeure.ColumnName = "Heure"
            dtFromGrid.Columns.Add(ColHeure)
            Dim ColDegre As DataColumn = New DataColumn()
            ColDegre.ColumnName = "Degre"
            dtFromGrid.Columns.Add(ColDegre)
            Dim ColEven As DataColumn = New DataColumn()
            ColEven.ColumnName = "Evenement"
            dtFromGrid.Columns.Add(ColEven)
     
            ' Permet d'ajouter les colonnes du DataTable dans les colonnes du DGV
            For Each col As DataGridViewColumn In DataGridView1.Columns
                dtFromGrid.Columns.Add(col.Name)
            Next
     
            For Each alar As Alarme In DicoTest.Values
                dtFromGrid.Rows.Add(alar.Img, alar.TimeDate, alar.TimeHeure, alar.Degre, alar.Evenement)
            Next
     
            bs.DataSource = dtFromGrid
     
            With DataGridView1
                .RowHeadersVisible = False
                .DataSource = bs
                .Columns(0).SortMode = DataGridViewColumnSortMode.NotSortable
                .Columns(1).SortMode = DataGridViewColumnSortMode.NotSortable
                .Columns(2).SortMode = DataGridViewColumnSortMode.NotSortable
                .Columns(3).SortMode = DataGridViewColumnSortMode.NotSortable
                .SelectionMode = DataGridViewSelectionMode.FullRowSelect
                .AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells
            End With
     
        End Sub

    Merci d'avance pour vos suggestions, et j’accepte aussi vos solutions car je trouve la mienne pas trop jolie a voir de loin !!

  2. #2
    Membre expérimenté
    Avatar de charouel
    Homme Profil pro
    Freelance
    Inscrit en
    Mars 2009
    Messages
    618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 618
    Points : 1 454
    Points
    1 454
    Billets dans le blog
    9
    Par défaut
    tu peux essayé ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                Using dialog As OpenFileDialog = New OpenFileDialog()
                If dialog.ShowDialog() = DialogResult.OK Then
                    Me.monDataGridView.Rows(e.RowIndex).Cells(Me.colonneImage.Index).Value = Image.FromFile(dialog.FileName)
                End If
            End Using

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 263
    Points : 148
    Points
    148
    Par défaut
    j'aurai bien aimé une petite explication car ta ligne d'instruction qui se trouve dans la condition je l'utilise déjà qu'une certaine manière dans mon premier programme. Justement je souhaite pas ajouter une image dans mon DGV mais une image dans mon DataTable en quelque sort ou un truc du genre pour ne pas avoir de souci avec le filtre de mon BS.

    Merci en tosu cas pour ta réponse !!

  4. #4
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 263
    Points : 148
    Points
    148
    Par défaut
    Bon je pense avoir trouver une solution beaucoup plus simple.

    Étant donné que j'arrive déjà a mettre des images qui se trouve dans une ListImage directement dans mon DGV en fonction de certain critère comme le niveau de priorité d'une alarme, mon plus gros souci était entre autre lorsque je réalise un filtrage, je me retrouve avec des cases mortes. pour résoudre ce problème, j'ai décidé de faire un refresh via une procédure de l'ensemble de me ligne de mon DGV apres un filtrage ou autre manipulation de ce genre.

    En plus par la suite, je vais devoir réaliser le clignotement de certaine de mes images donc l'idée de mettre des images dans mon DataTable est complément loufoque !!

    Je pose ma solution demain je pense !!

Discussions similaires

  1. [wxGlade] ajouter une image dans une interface
    Par moon93 dans le forum wxPython
    Réponses: 2
    Dernier message: 12/06/2007, 14h49
  2. [D7] Comment ajouter une image dans du RTF ?
    Par Lung dans le forum Delphi
    Réponses: 21
    Dernier message: 02/10/2006, 17h59
  3. Comment ajouter une image dans une balise div ??
    Par liv dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 05/05/2006, 12h48
  4. comment ajouter une image dans mon HTML??
    Par Mickey.jet dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 22/03/2006, 16h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo