Ich habe Lösungen für dieses anderswo gesehen, aber sie alle verwenden die Idee der Einstellung eines DataRowView gleich meine DataGridViewRow.DataBoundItem, dann mit der DataRowView.Row-Eigenschaft (in meinem Code unten).
Hier ist mein Code:
Dim tblTemp As New DataTable()
Dim row As Windows.Forms.DataGridViewRow
Dim rowView As DataRowView
For Each row In grdLabels.SelectedRows
If (row.Cells("Status").Value = Status.RECIEVED) Then
rowView = DirectCast(row.DataBoundItem, DataRowView)
tblTemp.Rows.Add(rowView.Row)
End If
Next
Das Problem ist, dass Sie beim Kopieren von Daten aus einer Tabelle in eine andere die Fehlermeldung "Diese Zeile gehört bereits zu einer anderen Tabelle" erhalten. Gibt es eine Möglichkeit, diese Zeile tatsächlich zu kopieren, anstatt sie zu referenzieren? Ich würde es vorziehen, nicht jede Zelle in einer Schleife durchlaufen zu müssen, um ihre Werteigenschaft zu kopieren. Gibt es eine bessere Möglichkeit, dies zu tun?
Lösung unter Verwendung des Vorschlags von NYSystemsAnalyst:
Dim tblTemp As New DataTable()
Dim row As Windows.Forms.DataGridViewRow
Dim rowView As DataRowView
If TypeOf grdLabels.DataSource Is DataTable Then
tblTemp = CType(grdLabels.DataSource, DataTable).Clone()
End If
For Each row In grdLabels.SelectedRows
If (row.Cells("Status").Value = Status.RECIEVED) Then
rowView = DirectCast(row.DataBoundItem, DataRowView)
tblTemp.ImportRow(rowView.Row)
End If
Next