DataGridViewer via Liste /BindingSource einlesen; Funktioniert nicht

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von FormFollowsFunction.

    DataGridViewer via Liste /BindingSource einlesen; Funktioniert nicht

    Guten Tag,

    ich möchte mein DataGridView (dgLoeschenTier) mit eine List füllen, welche über das Form / Class "NeuesTier" instanziert wird.
    Das funktioniert leider nicht. Ich habe schon fast in jeder Klasse Listen angelegt, über DataGriv-Eigenschaften die Bindingssource auf die Class.Tier bzw. Class.NeuesTier umgestellt. Der letzte Versuch war die manuelle Bindingssource über den Code (siehe unten). Alles ohne Erfolg. Könntet ihr mir bitte helfen? Ich will ja vom Form/Class "TierLoeschen" auf die Liste der Class.NeuesTier zugreifen. Über eine BindingSource soll die Liste immer aktuell sein.... Auch dem INotifyPropertyChanged bin ich nicht abgeneigt, leider kenne ich den aber gar nicht :(

    VB.NET-Quellcode

    1. Imports OOP3_WindowsForms_1
    2. Public Class TierLoeschen
    3. Dim bs As New BindingSource
    4. Private Sub dgLoeschenTier_SelectionChanged(sender As Object, e As EventArgs) Handles dgLoeschenTier.SelectionChanged
    5. If (dgLoeschenTier.SelectedRows.Count > 0) Then 'wenn Zeilenanzahl > 0 ist,...
    6. End If
    7. End Sub
    8. Private Sub TierLoeschen_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    9. dgLoeschenTier.AutoGenerateColumns = False 'Keine zusätzlichen Spalten anlegen
    10. 'die Propertynamen der dglöschenTier müssen
    11. End Sub ' mit den Properties aus tier übereinstimmen
    12. End Class


    VB.NET-Quellcode

    1. Imports OOP3_WindowsForms_1
    2. Public Class NeuesTier
    3. Dim elefant As Tier
    4. Dim pferd As Tier
    5. Dim fisch As Tier
    6. Dim adler As Tier
    7. Dim liTierListe As List(Of Tier) = New List(Of Tier)
    8. Public Property LiTierListe1 As List(Of Tier)
    9. Get
    10. Return liTierListe
    11. End Get
    12. Set(value As List(Of Tier))
    13. liTierListe = value
    14. End Set
    15. End Property
    16. Private Sub btFertig_Click(sender As Object, e As EventArgs) Handles btFertig.Click
    17. Select Case lbTierwahl.Text.ToLower
    18. Case "elefant"
    19. elefant = New Tier()
    20. elefant.TierName = lbTierwahl.Text.ToLower
    21. elefant.Laut = txtLaut.Text
    22. elefant.AnzahlBeine = CType(txtBeine.Text, Int32)
    23. elefant.SchwanzVorhanden = Convert.ToBoolean(lbSchwanz.Text)
    24. elefant.Gewicht = VBMath.Rnd * 500
    25. PictureBox1.Image = Image.FromFile("C:\Users\Angemon\documents\visual studio 2015\Projects\OOP3_WindowsForms_1\OOP3_WindowsForms_1\Resources\elefant.jpg")
    26. elefant.getInfo()
    27. liTierListe.Add(elefant)
    28. Case "pferd"
    29. pferd = New Tier()
    30. pferd.TierName = lbTierwahl.Text.ToLower
    31. pferd.Laut = txtLaut.Text
    32. pferd.AnzahlBeine = CType(txtBeine.Text, Int32)
    33. pferd.SchwanzVorhanden = Convert.ToBoolean(lbSchwanz.Text)
    34. pferd.Gewicht = VBMath.Rnd * 50
    35. PictureBox1.Image = Image.FromFile("C:\Users\Angemon\documents\visual studio 2015\Projects\OOP3_WindowsForms_1\OOP3_WindowsForms_1\Resources\pferd.jpg")
    36. pferd.getInfo()
    37. liTierListe.Add(pferd)
    38. Case "fisch"
    39. fisch = New Tier()
    40. fisch.TierName = lbTierwahl.Text.ToLower
    41. fisch.Laut = txtLaut.Text
    42. fisch.AnzahlBeine = CType(txtBeine.Text, Int32)
    43. fisch.SchwanzVorhanden = Convert.ToBoolean(lbSchwanz.Text)
    44. fisch.Gewicht = VBMath.Rnd * 5
    45. PictureBox1.Image = Image.FromFile("C:\Users\Angemon\documents\visual studio 2015\Projects\OOP3_WindowsForms_1\OOP3_WindowsForms_1\Resources\fisch.jpg")
    46. fisch.getInfo()
    47. liTierListe.Add(fisch)
    48. Case "adler"
    49. adler = New Tier()
    50. adler.TierName = lbTierwahl.Text.ToLower
    51. adler.Laut = txtLaut.Text
    52. adler.AnzahlBeine = CType(txtBeine.Text, Int32)
    53. adler.SchwanzVorhanden = Convert.ToBoolean(lbSchwanz.Text)
    54. adler.Gewicht = VBMath.Rnd * 10
    55. PictureBox1.Image = Image.FromFile("C:\Users\Angemon\documents\visual studio 2015\Projects\OOP3_WindowsForms_1\OOP3_WindowsForms_1\Resources\adler.jpg")
    56. adler.getInfo()
    57. liTierListe.Add(adler)
    58. End Select
    59. End Sub
    60. Private Sub NeuesTier_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    61. End Sub
    62. End Class


    VB.NET-Quellcode

    1. Imports OOP3_WindowsForms_1
    2. Public Class Tier
    3. Private _TierName As String
    4. Private _anzahlBeine As Integer
    5. Private _farbe As String
    6. Private _laut As String
    7. Private _schwanzVorhanden As Boolean = False
    8. Private _gewicht As Double
    9. Public Property AnzahlBeine() As Integer
    10. Get
    11. Return _anzahlBeine
    12. End Get
    13. Set(value As Integer)
    14. _anzahlBeine = value
    15. End Set
    16. End Property
    17. Public Property Farbe() As String
    18. Get
    19. Return _farbe
    20. End Get
    21. Set(value As String)
    22. _farbe = value
    23. End Set
    24. End Property
    25. Public Property Laut() As String
    26. Get
    27. Return _laut
    28. End Get
    29. Set(value As String)
    30. _laut = value
    31. End Set
    32. End Property
    33. Public Property SchwanzVorhanden() As Boolean
    34. Get
    35. Return _schwanzVorhanden
    36. End Get
    37. Set(value As Boolean)
    38. _schwanzVorhanden = value
    39. End Set
    40. End Property
    41. Public Property Gewicht() As Double
    42. Get
    43. Return _gewicht
    44. End Get
    45. Set(value As Double)
    46. _gewicht = value
    47. End Set
    48. End Property
    49. Public Property TierName() As String
    50. Get
    51. Return _TierName
    52. End Get
    53. Set(value As String)
    54. _TierName = value
    55. End Set
    56. End Property
    57. Public Sub getInfo()
    58. Dim ausgabe As String = ""
    59. ausgabe += ("Es wurde ein Tier.Object " & TierName.ToUpper & " erzeugt. Die Fellfarbe is " & Farbe & ", das Gewicht " & Math.Round(Gewicht, 1) & " Kg, mit " & _anzahlBeine & " Beine." & " Schwanz vorhanden? " & SchwanzVorhanden)
    60. MessageBox.Show(ausgabe)
    61. End Sub
    62. End Class


    Thema verschoben. ~Trade
    Bilder
    • Unbenannt.jpg

      466,92 kB, 3.284×896, 21 mal angesehen

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Trade“ ()

    myDgv.DataSource = myList

    VB.NET-Quellcode

    1. Imports OOP3_WindowsForms_1
    2. Public Class TierLoeschen
    3. Dim bs As New BindingSource
    4. Private Sub dgLoeschenTier_SelectionChanged(sender As Object, e As EventArgs) Handles dgLoeschenTier.SelectionChanged
    5. If (dgLoeschenTier.SelectedRows.Count > 0) Then 'wenn Zeilenanzahl > 0 ist,...
    6. End If
    7. End Sub
    8. Private Sub TierLoeschen_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    9. dgLoeschenTier.AutoGenerateColumns = False 'Keine zusätzlichen Spalten anlegen
    10. 'die Propertynamen der dglöschenTier müssen
    11. dgLoeschenTier.DataSource = NeuesTier.liTierListe
    12. End Sub ' mit den Properties aus tier übereinstimmen
    13. End Class


    auf dgLoeschenTier.DataSource = NeuesTier.liTierListe kann nur zugegriffen werden, wenn liTierListe in class_NeuesTier public ist. Aber das DataGrid in TierLoeschen funktioniert trozdem nicht, unabhängig davon welche Datenquelle ich in DataGridView-Aufgabe auswähle.

    ich habe das Projekt mal als zip beigetan. Ich bin mit meinen Latein am Ende.. ?(
    Bilder
    • Unbenannt.jpg

      400,85 kB, 3.284×945, 8 mal angesehen
    Dateien
    ErfinderDesRades hat hier im Forum, mehrere Tutorials zum Thema gemacht, suche mal danach.
    Warum eigentlich eine List ? Ich wurde zu einem Typisiertes DataSet greifen.
    ich hab Verständnis-Probleme

    Angemon84 schrieb:

    auf dgLoeschenTier.DataSource = NeuesTier.liTierListe kann nur zugegriffen werden, wenn liTierListe in class_NeuesTier public ist. Aber das DataGrid in TierLoeschen funktioniert trozdem nicht, unabhängig davon welche Datenquelle ich in DataGridView-Aufgabe auswähle.
    Das klingt zum Teil wie eine Fehlermeldung (aber falsch zitiert), zum Teil wie irgendwas anneres.

    Also wenn du über eine Fehlermeldung reden möchtest, zitiere sie bitte richtig, und mach das Zitat als solches kenntlich, und auch die CodeZeile, auf die sich der Fehler bezieht.
    Ich sag nur dgLoeschenTier.DataSource = NeuesTier.liTierListe. Da endest Du ganz schnell bei diesem Thema.
    Zuerst instanziierst Du das NeuesTierForm per New richtig, wenn Du es aufrufst und änderst dann dessen Tierlisten-Property. Und beim Löschen? Verknüpfst Du das Löschen-Form-DGV mit der o.a. Codezeile. Das ist aber nicht die Liste, die Du vorher verändert hast, sondern eine andere! Du glaubst zwar, das es die selbe ist, aber das ist sie nicht. Nur weil 5 Kühlschränke nach dem selben Bauplan konstruiert wurden, kann man nicht auf den Inhalt des einen Kühlschranks in Berlin über den gleichen Kühlschrank zugreifen, der in Köln steht.
    Entweder machst Du die Liste Shared, packst die Liste in eine Form-unabhängige Klasse oder machst es über ein tDS - was @FormFollowsFunction bereits schrieb - und der EdR früher oder später auch geschrieben hätte.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    Super ! Und danke für die Aufmerksamkeit ! :S

    edit: Selbstzensur. ;)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „FormFollowsFunction“ ()