Bonjour a tous,
J'ai fait un exemple tout simple pour essayer d'implémenter tout les mécanismes (a l’intérieur de la classe) qui font qu'une classe puisse être utilisée en tant que source de données avec le même comportement qu'un DataTable (par exemple). C'est a dire que la source de données doit pouvoir notifier automatiquement les contrôles liés lors de la modification, l'ajout et la suppression a travers la liaisons de données.
Pour la modification j'ai trouvé mais pour l'ajout ou la suppression je cherche encore.
Par exemple lorsque j’exécute la dernière ligne du code :
DataSourcePersonnes.Add(ThisPersonne)
Je ne vois pas ce nouveau élément dans le contrôle DataGridView.
Voici mon exemple de code :
La classe Personnes :
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 42 43 44 45 46 47
| Imports System.ComponentModel
Public Class Personnes
Inherits List(Of Personne)
End Class
Public Class Personne
Implements INotifyPropertyChanged
'Public Event PropertyChanged As PropertyChangedEventHandler _
' Implements INotifyPropertyChanged.PropertyChanged
Public Event PropertyChanged(sender As Object, e As System.ComponentModel.PropertyChangedEventArgs) _
Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged
' This method is called by the Set accessor of each property.
' The CallerMemberName attribute that is applied to the optional propertyName
' parameter causes the property name of the caller to be substituted as an argument.
Private Sub NotifyPropertyChanged(<CallerMemberName()> Optional ByVal propertyName As String = Nothing)
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propertyName))
End Sub
Private _Nom As String
<Description("Nom de la personne"), Category("(Identification)"), _
DisplayName("Nom")> _
Public Property Nom() As String
Get
Return _Nom
End Get
Set(ByVal value As String)
_Nom = value
NotifyPropertyChanged()
End Set
End Property
Private _Prenom As String
<Description("Prenom de la personne"), Category("(Identification)"), _
DisplayName("Prenom")> _
Public Property Prenom() As String
Get
Return _Prenom
End Get
Set(ByVal value As String)
_Prenom = value
NotifyPropertyChanged()
End Set
End Property
End Class |
Le code du formulaire Form1 :
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
| Public Class Form1
Dim MainBindingSource As New BindingSource
Dim DataSourcePersonnes As New Personnes
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
AddHandler MainBindingSource.CurrentChanged, AddressOf MainBindingSource_CurrentChanged
'Configuration du gestionnaire de liaison sur la source de données
MainBindingSource.DataSource = DataSourcePersonnes
'Liaison du gestionnaire avec les contrôles d'affichage de données
DataGridView1.DataSource = MainBindingSource
'MainBindingNavigator.BindingSource = MainBindingSource
End Sub
Private Sub MainBindingSource_CurrentChanged(ByVal sender As Object, ByVal e As System.EventArgs)
PropertyGrid1.SelectedObject = CType(sender, BindingSource).Current
End Sub
Private Sub btnNouveau_Click(sender As System.Object, e As System.EventArgs) Handles btnNouveau.Click
Dim ThisPersonne As New Personne
ThisPersonne.Nom = "Nom1"
ThisPersonne.Prenom = "Prenom1"
DataSourcePersonnes.Add(ThisPersonne)
End Sub
End Class |
Savez vous comment faire ? Merci beaucoup pour votre aide.
Partager