【问题标题】:How to copy datarow into a new datatable? - VB.Net如何将数据行复制到新的数据表中? - VB.Net
【发布时间】:2018-11-30 04:06:53
【问题描述】:

我正在尝试将 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.

【问题讨论】:

  • 如错误消息所示,在调用 dt2 方法之前,您没有为 dt2 变量分配任何内容。您声明了变量,但从未真正创建 DataTable 对象,也从未向其中添加任何列。您必须手动执行此操作,或者在现有的DataTable 上调用Clone。正如我在回答中建议的那样,最好在现有的DataTable 上创建一个DataView
  • 但我已经试过了。虽然它适用于我的 GridView,但我的饼图仍然一团糟。
  • 我不会做太多图表,如果有的话,所以我不确定图表如何处理DataView,但如果它与DataTable 有任何不同,我会感到惊讶。 DataView 肯定会为 GridView 工作,这就是你在这里问的问题。如果您对使用带有图表控件的DataView 有其他问题,那么您应该单独发布,或者您可以按照我的描述创建另一个DataTable
  • 很公平。我实际上已经发布了这个问题。只是我正在运行一些测试并遇到了这个问题,不得不问一个这个问题才能得到答案。是的,我编程太差了……

标签: vb.net


【解决方案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 吗?你能不能只在现有的DataTable 上创建一个DataView,例如

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

DataView 可以绑定到任何DataTable 可以绑定的位置,事实上,当您绑定DataTable 时,数据实际上来自DefaultView 属性,即DataView 类型。

【讨论】:

  • 我明白了。那么我可以使用什么来允许多行。因为A06应该有7行数据。
  • 因为我需要那个 DataTable 来生成饼图。如果我只是参考现有的DataTable,它就会变成一团糟。 GridView 仅供我测试数据是否正确。
  • 我在上面编辑了一些其他问题。请看一看。
猜你喜欢
  • 2012-03-07
  • 1970-01-01
  • 2013-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-04
相关资源
最近更新 更多