Benutzer mit den meisten Antworten
DataGridView master/detail - Sortierung und Filterung

Frage
-
Hallo,
in meiner Form habe ich zwei DGV (ObjektDGV und ObjektDGV2). Das DGV stellt eine Tabelle dar, während im DGV2 (verknüpft über die ID von DGV) alle Details dargestellt werden.
Nun möchte ich 1., dass nach der Sortierung von DGV wieder die zuvor markierte Zeile ausgewählt und angezeigt wird und 2., dass im DGV2 die Daten gefiltert werden, sodass nur der im DGV ausgewählten Zeile zugehörige Werte dargestellt werden.
Die Lösungen beider Probleme funktionieren für sich. Nur leider in Kombination nicht - sortiere ich nach einer Spalte, so tritt der Fehler "Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt." auf.
Hier mein Code für das SelectionChanged- und das Sorted-Ereignis:
Private Sub ObjektDGV_SelectionChanged(sender As Object, e As EventArgs) Handles ObjektDGV.SelectionChanged With ObjektDGV If .SelectedRows.Count > 0 AndAlso Not _protectselection Then _selectedrows.Clear() For i As Integer = 0 To .SelectedRows.Count - 1 _selectedrows.Add(CInt(.SelectedRows(i).Cells("ObjektID").Value)) Next i End If End With Dim dv1 = New DataView(DataSet.tblObjekte) Try dv1.RowFilter = "ZubehoerZuObjekt = " & ObjektDGV.CurrentRow.Cells(0).Value ObjektDGV2.DataSource = dv1 Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub Private Sub ObjektDGV_Sorted(sender As Object, e As EventArgs) Handles ObjektDGV.Sorted _protectselection = True With ObjektDGV .ClearSelection() If _selectedrows.Count > 0 Then For i As Integer = 0 To .Rows.Count - 1 If _selectedrows.Contains(CInt(.Rows(i).Cells("ObjektID").Value)) Then .Rows(i).Selected = True .FirstDisplayedScrollingRowIndex = i End If Next i End If End With _protectselection = False End Sub
Hat jemand eine Idee wo mein Fehler liegt?
Antworten
-
Guten Morgen,
manchmal muss man einfach "eine Nacht drüber schlafen".
Ich konnte das Problem wie folgt lösen:
Private Sub ObjektDGV_SelectionChanged(sender As Object, e As EventArgs) Handles ObjektDGV.SelectionChanged With ObjektDGV If .SelectedRows.Count > 0 AndAlso Not _protectselection Then _selectedrow.Clear() For i As Integer = 0 To .SelectedRows.Count - 1 _selectedrow.Add(CInt(.SelectedRows(i).Cells("ObjektID").Value)) Next i End If End With Dim dv1 = New DataView(DataSet.tblObjekt) Try If ObjektDGV.CurrentRow IsNot Nothing Then dv1.RowFilter = "ZubehoerZuObjekt = " & ObjektDGV.CurrentRow.Cells(0).Value If _currentRow IsNot Nothing Then dv1.RowFilter = "ZubehoerZuObjekt = " & _currentRow End If _currentRow = Nothing ObjektDGV2.DataSource = dv1 End If Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub Private Sub ObjektDGV_Sorted(sender As Object, e As EventArgs) Handles ObjektDGV.Sorted _protectselection = True With ObjektDGV .ClearSelection() If _selectedrow.Count > 0 Then For i As Integer = 0 To .Rows.Count - 1 If _selectedrow.Contains(CInt(.Rows(i).Cells("ObjektID").Value)) Then _currentRow = .Rows(i).Cells(0).Value .Rows(i).Selected = True .FirstDisplayedScrollingRowIndex = i End If Next i End If End With _protectselection = False End Sub
- Als Antwort markiert Fischer, Alexander Donnerstag, 10. September 2015 07:11
- Bearbeitet Fischer, Alexander Donnerstag, 10. September 2015 07:12