我试图将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.
答案 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
。