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:
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:
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:
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:
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 !!