如何将数据行复制到新的数据表中? -VB.Net

时间:2018-11-30 04:06:53

标签: vb.net

我试图将DataRow复制到新的DataTable中,然后在GridView中显示它,但是我一直遇到麻烦。

Dim r As DataRow() = dt.Select("MacID = 'A06'")

Dim dt2 As DataTable
dt2.ImportRow(r) 'this is where problem begins

GridView2.DataSource = dt2
GridView2.DataBind()

DataRow来自另一个DataTable,当我将鼠标悬停在问题行上时,它说

Value of type '1-dimensional array of System.Data.DataRow' cannot be converted to 'System.Data.DataRow'

在我的一生中,我不知道那意味着什么,也不知道这是否正确(可能不正确)。请帮助...

编辑1: 在 jmcilhinney 的回复之后,我尝试了他的第二个代码,因为有多个行。但是我在代码中遇到了一些问题:

Dim dt2 as DataTable

Dim rows = dt.Select("MacID = 'A06'")

        For Each row In rows
            dt2.ImportRow(row) 'Problem shown here
        Next

        GridView2.DataSource = dt2
        GridView2.DataBind()

当我再次将鼠标悬停在它上面时,错误提示:

Variable 'dt2' is used before it has been assigned a value.
A null reference exception could result at runtime.

1 个答案:

答案 0 :(得分:1)

DataTable.Select方法返回匹配行的数组,而不是单个行。 ImportRow将仅导入一行。解决问题的具体方法取决于您要实现的目标。

如果您尝试按键查找单个行,则应调用Rows.Find而不是Select,例如

Dim row = sourceTable.Rows.Find(keyValue)

If row IsNot Nothing
    destinationTable.ImportRow(row)
End If

如果可能有多个匹配项,请使用Select,但您必须遍历结果数组,例如

Dim rows = sourceTable.Select(filterExpression)

For Each row In rows
    destinationTable.ImportRow(row)
Next

也就是说,您真的需要另一个DataTable吗?您不仅可以在现有的DataView上创建一个DataTable,例如

Dim view As New DataView(sourceTable,
                         filterExpression,
                         Nothing,
                         DataViewRowState.CurrentRows)

DataView可以绑定到任何DataTable可以绑定的地方,实际上,当您绑定DataTable时,数据实际上来自DefaultView属性,即输入DataView