Hey,
Ich habe eine Form mit 2 Datagridviews. Außerdem habe ich in der Form selbst eine Bindinglist, die Bücher enthält. Die Bindinglist(of Books) ist an dgvBooks gebunden.
Die Klasse Book ist außerhalb der Form definiert und enthält eine Bindinglist(of Chapter). Die Klasse Chapter ist innerhalb der Klasse Book definiert.
Es gibt eine Eigenschaft der Buchklasse (Titel), auf die ich auch in der Klasse Chapter zugreifen will (lesen und ändern). Denn wenn jemand den Buchtitel im DGV ändern sollte, dann soll Buchtitel in beiden DGV's synchron geändert werden.
Je nachdem welches Buch im dgvBooks gerade ausgewählt ist, werden die entsprechenden Kapitel im dgvChapters angezeigt.
Eine Möglichkeit wäre es Im Konstruktor der Chapter Klasse eine Referenz auf das Buch zu übergeben. Das finde ich aber nicht so sauber.
Wieso werden eigentlich die Kapitel nicht mit zerstört, wenn ich zum Beispiel ein Buch aus der Bindinglist(of Books) entferne? Die Kapitel werden weiterhin im 2. DGV dargestellt (solange ich die .DataSource nicht ändere).
Existiert ein Objekt solange, bis keine Referenz mehr darauf existiert?
Form1
Book
Ich habe eine Form mit 2 Datagridviews. Außerdem habe ich in der Form selbst eine Bindinglist, die Bücher enthält. Die Bindinglist(of Books) ist an dgvBooks gebunden.
Die Klasse Book ist außerhalb der Form definiert und enthält eine Bindinglist(of Chapter). Die Klasse Chapter ist innerhalb der Klasse Book definiert.
Es gibt eine Eigenschaft der Buchklasse (Titel), auf die ich auch in der Klasse Chapter zugreifen will (lesen und ändern). Denn wenn jemand den Buchtitel im DGV ändern sollte, dann soll Buchtitel in beiden DGV's synchron geändert werden.
Je nachdem welches Buch im dgvBooks gerade ausgewählt ist, werden die entsprechenden Kapitel im dgvChapters angezeigt.
Eine Möglichkeit wäre es Im Konstruktor der Chapter Klasse eine Referenz auf das Buch zu übergeben. Das finde ich aber nicht so sauber.
Wieso werden eigentlich die Kapitel nicht mit zerstört, wenn ich zum Beispiel ein Buch aus der Bindinglist(of Books) entferne? Die Kapitel werden weiterhin im 2. DGV dargestellt (solange ich die .DataSource nicht ändere).
Existiert ein Objekt solange, bis keine Referenz mehr darauf existiert?
VB.NET-Quellcode
- Public Class Form1
- Private Property Books As New BindingList(Of Book)
- Private Sub Form1_Load(sender As System.Object, e As System.EventArgs)
- dgvBooks.SelectionMode = DataGridViewSelectionMode.FullRowSelect
- End Sub
- Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
- 'Testdaten einfügen
- Dim bk1 As New Book("eins", "11", "111")
- Dim bk2 As New Book("zwei", "22", "222")
- For i = 1 To 4
- bk1.AddChapter("Kapitel 1")
- bk2.AddChapter("Kapitel 2")
- Next
- Books.Add(bk1)
- Books.Add(bk2)
- dgvBooks.DataSource = Books
- End Sub
- Private Sub dgvBooks_SelectionChanged(sender As System.Object, e As System.EventArgs) Handles dgvBooks.SelectionChanged
- If dgvBooks.SelectedCells.Count <> 0 Then
- Dim rowindex As Int32 = dgvBooks.SelectedCells.Item(0).RowIndex
- dgvChapters.DataSource = CType(dgvBooks.Rows(rowindex).DataBoundItem, Book).Chapters
- Else
- dgvChapters.DataSource = Nothing
- End If
- End Sub
- End Class
VB.NET-Quellcode
- Public Class Book
- Private Property _Title As String
- Private Property _Subtitle As String
- Private Property _Authors As String
- Private Property _Chapters As New BindingList(Of Chapter)
- Public Sub New(Title As String, Subtitle As String, Authors As String)
- _Title = Title
- _Subtitle = Subtitle
- _Authors = Authors
- End Sub
- Public Sub AddChapter(ChapterTitle As String)
- _Chapters.Add(New Chapter(ChapterTitle))
- End Sub
- Public Property Title As String
- Get
- Return _Title
- End Get
- Set(value As String)
- _Title = value
- Chapters.ResetBindings()
- End Set
- End Property
- Public Property Subtitle As String
- Get
- Return _Subtitle
- End Get
- Set(value As String)
- _Subtitle = value
- End Set
- End Property
- Public Property Authors As String
- Get
- Return _Authors
- End Get
- Set(value As String)
- _Authors = value
- End Set
- End Property
- Public ReadOnly Property Chapters As BindingList(Of Chapter)
- Get
- Return _Chapters
- End Get
- End Property
- Class Chapter
- Private Property _ChapterTitle As String
- Public Sub New(ChapterTitle As String)
- _ChapterTitle = ChapterTitle
- End Sub
- Public Property BookTitle As String
- Get
- Return "????" 'Hier muss der Titel des Buches zurückgegeben werden
- End Get
- Set(value As String)
- 'Hier muss der Titel des Buches geändert werden
- End Set
- End Property
- Public Property ChapterTitle As String
- Get
- Return _ChapterTitle
- End Get
- Set(value As String)
- _ChapterTitle = value
- End Set
- End Property
- 'Noch mehr Propertys...
- End Class
- End Class