Преобразование DataGridViewRow в DataRow - PullRequest
4 голосов
/ 17 сентября 2009

Я видел решения этого еще где, но все они используют идею установки DataRowView равным моему DataGridViewRow.DataBoundItem, а затем использования свойства DataRowView.Row (в моем коде ниже).

Вот мой код:

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

Проблема в том, что если вы делаете это для копирования данных из одной таблицы в другую, вы получите сообщение об ошибке «Эта строка уже принадлежит другой таблице». Есть ли способ на самом деле скопировать эту строку, а не ссылаться на нее? Я бы предпочел не просто проходить по каждой ячейке, копируя ее свойство Value. Есть ли лучший способ сделать это?

Решение с использованием предложения 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

1 Ответ

3 голосов
/ 17 сентября 2009

См. Ссылку: http://support.microsoft.com/kb/308909

Вам необходимо использовать метод ImportRow ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...