Ich bin ja fleißig am VB-Lernen. Nun habe ich schon mal eine kleine Adressverwaltung mittels typisierten Dataset und den Videos von @ErfinderDesRades gebastelt. Sieht auch schon ganz hübsch aus. Bin aber mit meinem geplanten Projekt noch lange nicht fertig. Eigentlich soll man ja Frontend und Backend trennen. Also beschäftige ich mich gerade mit Objektbinding.
Ich habe mir da erstmal kleine Klassen gebastelt, welche ich auch schon mal mit nem Datagridview, Textboxen etc. gebunden habe. Funktioniert schon mal.
Nun wollte ich aber Sub-Klassen an eine Combobox bzw. mit ins Datagridview einbinden.
Ich habe da auch mal einen kleinen Code vorbereitet(ist aber nur ein Auszug als Beispiel):
Achja,
Warum eine Adressenliste? Weil ich jede Person mehrere Adressen haben kann...
Ich kann die erstellten Objekte auch alle brav füllen und entsprechend auch abrufen.
Also mit
mit
Was aber nicht funktioniert ist, dass ich in nem DatagridView die Strasse angezeigt bekomme.
Also ich habe erst eine BindingList mit Personen und deren Adressen gefüllt (lstPersonen) und dann diese an eine Bindingsource gebunden. Dieses an ein DGV gebunden funktioniert auch - Personen werden angezeigt.
Nun wollte ich eine Bindingsource an die lstAdresse der einzelnen Person binden um diese dann in dem DGV die Adresse als Spalte angezeigt zu bekommen - sei es einzeln - also Spalte für Strasse, PLZ, Ort oder meinetwegen auch als einzige Spalte mit Strasse PLZ Ort. Das aber funktionert nicht. Bei ner Datenbank oder dem Dataset klappt es ja, indem man eine Tabelle PersonAdresse bastelt und diese ans DGV bindet, Adressbindingsource an die Combobox dann die ID als Wertmember auswählt und das DGV sucht sich was es braucht. Hier funktioniert das nicht so einfach.
Wie bekommt man sowas hin?
Auf die Sache mit dem Objektbinding bin ich durch den Beitrag von @ErfinderDesRades Singleton, Serialisierung (Json, Xml) und Databinding ohne Dataset gestossen. Leider habe ich das Problem, dass ich dessen Solutions nicht bei mir in VS 2015 Com. zum laufen bekomme. Da bekomme ich leider ständig nur Fehlermeldungen - zum einen muss einiges migriert werden und dann im Anschluss funktioniert nix mehr...Daher konnte ich das auch nicht weiter anschauen...
Ich habe mir da erstmal kleine Klassen gebastelt, welche ich auch schon mal mit nem Datagridview, Textboxen etc. gebunden habe. Funktioniert schon mal.
Nun wollte ich aber Sub-Klassen an eine Combobox bzw. mit ins Datagridview einbinden.
Ich habe da auch mal einen kleinen Code vorbereitet(ist aber nur ein Auszug als Beispiel):
VB.NET-Quellcode
-
- public Class clsPerson
- Private _Name1 As String
- Public Property Name1() As String
- Get
- Return _Name1
- End Get
- Set(ByVal value As String)
- _Name1 = value
- End Set
- End Property
- Private _AdresseItem As clsAdresse
- Public Property AdresseItem(ByVal i As Integer) As clsAdresse
- Get
- Return lstAdresse.Item(i)
- End Get
- Set(ByVal value As clsAdresse)
- _AdresseItem = value
- End Set
- End Property
- Private _lstAdresse As clsAdresseliste = New clsAdresseliste
- Public Property lstAdresse() As clsAdresseliste
- Get
- Return _lstAdresse
- End Get
- Set(ByVal value As clsAdresseliste)
- _lstAdresse = value
- End Set
- End Property
- end class
- public Class clsPersonListe
- Inherits System.ComponentModel.BindingList(Of clsPerson)
- end class
- public class clsAdresse
- Private _Strasse As String
- Public Property Strasse() As String
- Get
- Return _Strasse
- End Get
- Set(ByVal value As String)
- SetProperty(_Strasse, value, "Strasse")
- End Set
- End Property
- public sub new()
- end sub
- public sub new(byval dStrasse as string)
- Strasse = dStrasse
- end Sub
- end class
- public Class clsPersonListe
- Inherits System.ComponentModel.BindingList(Of clsPerson)
- end class
Achja,
INotifyPropertyChanged
ist implementiert...Warum eine Adressenliste? Weil ich jede Person mehrere Adressen haben kann...
Ich kann die erstellten Objekte auch alle brav füllen und entsprechend auch abrufen.
Also mit
oPerson.Name1
kann ich die Property anzeigen lassen. Ich kann auch mit operson.lstAdresse.Item(x).Strasse
die Strasse aufrufen - oder direkt mit
pers.AdresseItem(x).Strasse)
.Was aber nicht funktioniert ist, dass ich in nem DatagridView die Strasse angezeigt bekomme.
Also ich habe erst eine BindingList mit Personen und deren Adressen gefüllt (lstPersonen) und dann diese an eine Bindingsource gebunden. Dieses an ein DGV gebunden funktioniert auch - Personen werden angezeigt.
Nun wollte ich eine Bindingsource an die lstAdresse der einzelnen Person binden um diese dann in dem DGV die Adresse als Spalte angezeigt zu bekommen - sei es einzeln - also Spalte für Strasse, PLZ, Ort oder meinetwegen auch als einzige Spalte mit Strasse PLZ Ort. Das aber funktionert nicht. Bei ner Datenbank oder dem Dataset klappt es ja, indem man eine Tabelle PersonAdresse bastelt und diese ans DGV bindet, Adressbindingsource an die Combobox dann die ID als Wertmember auswählt und das DGV sucht sich was es braucht. Hier funktioniert das nicht so einfach.
Wie bekommt man sowas hin?
Auf die Sache mit dem Objektbinding bin ich durch den Beitrag von @ErfinderDesRades Singleton, Serialisierung (Json, Xml) und Databinding ohne Dataset gestossen. Leider habe ich das Problem, dass ich dessen Solutions nicht bei mir in VS 2015 Com. zum laufen bekomme. Da bekomme ich leider ständig nur Fehlermeldungen - zum einen muss einiges migriert werden und dann im Anschluss funktioniert nix mehr...Daher konnte ich das auch nicht weiter anschauen...