如何将datarow复制到新的datatable中?-VB.Net
我试图将一个DataRow复制到一个新的DataTable中,然后在GridView中显示它,但我一直遇到问题如何将datarow复制到新的datatable中?-VB.Net,vb.net,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,当我将鼠标
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.
DataTable.Select方法返回匹配行的数组,而不是一行ImportRow
将只导入一行。你问题的具体解决方案取决于你想要达到的目标
如果您试图按键查找一行,则应调用行。查找而不是选择,例如
Dim row = sourceTable.Rows.Find(keyValue)
If row IsNot Nothing
destinationTable.ImportRow(row)
End If
Dim view As New DataView(sourceTable,
filterExpression,
Nothing,
DataViewRowState.CurrentRows)
如果可能存在多个匹配项,则使用选择
,但必须循环遍历结果数组,例如
Dim rows = sourceTable.Select(filterExpression)
For Each row In rows
destinationTable.ImportRow(row)
Next
也就是说,您真的需要另一个DataTable
?您能否在现有的数据表
上创建数据视图
Dim row = sourceTable.Rows.Find(keyValue)
If row IsNot Nothing
destinationTable.ImportRow(row)
End If
Dim view As New DataView(sourceTable,
filterExpression,
Nothing,
DataViewRowState.CurrentRows)
DataView
可以绑定到DataTable
可以绑定到的任何地方,事实上,当绑定DataTable
时,数据实际上来自DefaultView
属性,该属性的类型为DataViewDataTable。Select
方法返回一个匹配行的数组,而不是一行ImportRow
将只导入一行。你问题的具体解决方案取决于你想要达到的目标
如果您试图按键查找一行,则应调用行。查找而不是选择,例如
Dim row = sourceTable.Rows.Find(keyValue)
If row IsNot Nothing
destinationTable.ImportRow(row)
End If
Dim view As New DataView(sourceTable,
filterExpression,
Nothing,
DataViewRowState.CurrentRows)
如果可能存在多个匹配项,则使用选择
,但必须循环遍历结果数组,例如
Dim rows = sourceTable.Select(filterExpression)
For Each row In rows
destinationTable.ImportRow(row)
Next
也就是说,您真的需要另一个DataTable
?您能否在现有的数据表
上创建数据视图
Dim row = sourceTable.Rows.Find(keyValue)
If row IsNot Nothing
destinationTable.ImportRow(row)
End If
Dim view As New DataView(sourceTable,
filterExpression,
Nothing,
DataViewRowState.CurrentRows)
DataView
可以绑定到DataTable
可以绑定到的任何地方,事实上,当您绑定DataTable
时,数据实际上来自DefaultView
属性,类型为DataView
。那么我可以使用什么来允许多行呢。因为A06
应该有7行数据。因为我需要那个数据表来生成饼图。如果我只参考现有的数据表
,它将变成一团混乱。GridView只供我测试数据是否正确。我在上面编辑了一些附加问题。请看一看,我明白了。那么我可以使用什么来允许多行呢。因为A06
应该有7行数据。因为我需要那个数据表来生成饼图。如果我只参考现有的数据表
,它将变成一团混乱。GridView只供我测试数据是否正确。我在上面编辑了一些附加问题。请看一看。如错误消息所示,在调用ImportRow
方法之前,您没有为dt2
变量赋值。您声明了变量,但从未实际创建DataTable
对象,也从未向其添加任何列。您必须手动执行此操作,或者在现有的DataTable
上调用Clone
。正如我在回答中所建议的,最好只在现有的数据表上创建一个数据视图
,但我已经尝试过了。虽然它可以在我的GridView上运行,但我的饼图仍然乱七八糟。我不太会(如果有的话)绘制图表,所以我不确定图表如何处理数据视图
,但如果它与数据表
有什么不同,我会感到惊讶。DataView
肯定适用于GridView
,这就是您在这里询问的问题。如果您对将DataView
与图表控件一起使用还有其他问题,那么您应该单独发布,或者您可以按照我所述创建另一个DataTable
。这很公平。事实上,我已经发布了这个问题。只是我做了一些测试,遇到了这个问题,不得不问一个问题来得到答案。是的,我的编程能力很差……正如错误消息所示,在调用ImportRow
方法之前,您没有为dt2
变量赋值。您声明了变量,但从未实际创建DataTable
对象,也从未向其添加任何列。您必须手动执行此操作,或者在现有的DataTable
上调用Clone
。正如我在回答中所建议的,最好只在现有的数据表上创建一个数据视图
,但我已经尝试过了。虽然它可以在我的GridView上运行,但我的饼图仍然乱七八糟。我不太会(如果有的话)绘制图表,所以我不确定图表如何处理数据视图
,但如果它与数据表
有什么不同,我会感到惊讶。DataView
肯定适用于GridView
,这就是您在这里询问的问题。如果您对将DataView
与图表控件一起使用还有其他问题,那么您应该单独发布,或者您可以按照我所述创建另一个DataTable
。这很公平。事实上,我已经发布了这个问题。只是我做了一些测试,遇到了这个问题,不得不问一个问题来得到答案。是的,我很不擅长编程。。。