Alors, je rappelle que je n'ai pas utilisé Access depuis des années et je précise que je ne l'ai pas sur mon PC.
Donc je me suis inspiré des codes présents ici et sur ton 2eme sujet.
Ensuite, je code en C#, je sais que VB n'est pas sensible à la casse, alors j'ai appelé variables internes, propriétés et paramètre du constructeurs de façon bien distincte.
J'ai ensuite passé ces codes dans un traducteur en ligne.
On commence par écrire une classe qui correspond à tes enregistrements avec une propriété qui stocke si il y'a eu un changement (j'ai pas géré les annulation, c'est plus complexe mais réalisable)
Imports System.ComponentModel
Public Class DataColby
Implements INotifyPropertyChanged
Public Sub New(ByVal Ident As Integer, ByVal CodeArt As String, ByVal Prix_U As Double)
MyBase.New
ide = Ident
code = CodeArt
prixU = Prix_U
IsChanged = False
End Sub
Private ide As Integer
''' <summary>
''' Propriété correspondant au champ ID de la BDD
''' </summary>
Public Property ID As Integer
Get
Return Me.ide
End Get
Set
If (Me.ide = Value) Then
Return
End If
Me.ide = Value
Me.GenerePropertyChanged("ID")
End Set
End Property
Private code As String
''' <summary>
''' Propriété correspondant au champ Prix(U) de la BDD
''' </summary>
Public Property CodeArticle As String
Get
Return Me.code
End Get
Set
If (Me.code = Value) Then
Return
End If
Me.code = Value
Me.GenerePropertyChanged("CodeArticle")
End Set
End Property
Private prixU As Double
''' <summary>
''' Propriété correspondant au champ ID de la BDD
''' </summary>
Public Property PrixUnitaire As Double
Get
Return Me.prixU
End Get
Set
If (Me.prixU = Value) Then
Return
End If
Me.prixU = Value
Me.GenerePropertyChanged("CodeArticle")
End Set
End Property
'etc
''' <summary>
''' Propriété qui stockera si un changement a eu lieu
''' </summary>
Public Property IsChanged As Boolean
Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
Private Sub GenerePropertyChanged(ByVal Propriete As String)
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(Propriete))
Me.IsChanged = True
End Sub
End Class
Ensuite la méthode qui charge les données et affiche les données dans le datagridview
Dim lesData As List(Of DataColby) = New List(Of DataColby)
Private Sub ChargeBDD()
Dim Mag As Integer = 1
Dim PrixU As Integer = 0
Dim Sql As String = String.Format("SELECT ID, CodeArt, Stock, Sortie, [PrixG] AS[Prix(U)], Qté, Montant FROM Gros WHERE [Stock] >= '{0}' AND [PrixG] NOT LIKE '{1}' ORDER BY [ID] ASC",
Mag, PrixU) 'c'est mieux avec string format qu'avec des +
Dim GP As OleDbConnection = New OleDbConnection
Dim Cmd As OleDbCommand = New OleDbCommand(Sql)
Dim GrTA As OleDbDataAdapter = New OleDbDataAdapter(Cmd)
Cmd.Connection = GP
Dim CDSet As DataSet = New DataSet
GrTA.Fill(CDSet, "Gros")
Dim GrT As DataTable = CDSet.Tables("Gros")
Dim i As Integer = 0
Do While (i < GrT.Rows.Count)
lesData.Add(New DataColby(GrT.Rows(i).Field(Of Integer)("ID"), GrT.Rows(i).Field(Of String)("CodeArt"), GrT.Rows(i).Field(Of Double)("PrixG")))
i = (i + 1)
Loop
'là on ne fait pas Grid.DataSource = lesData car on verrait la colonne IsChanged
'Il faut ajouter un contrôle binding source comme expliqué dans le tuto, et modifier les colonnes à sa guise
DataColbyBindingSource.DataSource = lesData
End Sub
Et enfin la méthode qui extrait les datas modifiées pour les enregistrer
Private Sub EnregistrerModifs()
Dim modifs As List(Of DataColby) = lesData.Where(Function(x) x.IsChanged).ToList 'liste des enregistrements modifiés
For Each item As DataColby In modifs
'ici le code pour ajouter dans la BDD
Next
End Sub
Quand j'étais petit, la mer Morte n'était que malade.
George Burns