【问题标题】:How do you add your queried datatable results into a new datatable如何将查询的数据表结果添加到新的数据表中
【发布时间】:2021-07-30 07:06:27
【问题描述】:

有人可以帮我将查询的结果填充到现有数据表或新数据表中

        ''dt is filled with data from a csv file.

        Dim dataRows As DataRow() = dt.Select("[Calendar year TEXT] = '2020'")

        dt.Clear() 'Clear the datatable 
        dt.Rows.Add(dataRows) 'Add the result to the existing datatable or a new databletable if possible ?

【问题讨论】:

  • 将行添加到现有的 DataTable 是没有意义的,因为这些行已经在该表中。您当然可以创建一个新的DataTable,但可能没有意义。您可能可以使用已经调用 Select 的结果,或者只使用现有的 DataTable 并过滤它。您真正想要对数据做什么?了解这将表明最佳行动方案,可能是也可能不是新的DataTable

标签: windows vb.net datatable .net-5


【解决方案1】:

所以我想通了。 我需要一个新的 DataTable 的原因是我以后需要以原始形式再次使用它。 我无法将 DataRow 集合附加到我的显示控件,这就是为什么我需要一个包含过滤结果的新 DataTable。

Private Function FilterDataTable(ByVal strQuery As String, ByVal dtRaw As DataTable)

    Dim dataRows As DataRow() = dtRaw.Select(strQuery)

    Dim dtFiltered As DataTable
    dtFiltered = dtRaw.Clone() 'This is very important.

    For Each drow As DataRow In dataRows
        dtFiltered.ImportRow(drow) 'Add each filtered row to new DataTable.
    Next

    Return dtFiltered

结束函数

【讨论】:

    【解决方案2】:

    您的 dt.select 将返回一个 Datarow 数组,指向数据表 dt 中的行。然后您的 dt.clear 清除数据表,因此将清空 dataRows 数组,让您一无所有。

    我不清楚你到底想做什么。我猜你有一个要过滤的表,然后丢弃所有不匹配的行,留下一个数据表来处理。

    如果是这样,这里有几个选项:

    1. 直接使用数据行数组而不是数据表。真的需要将行转换回数据表吗?

    2. 创建一个新的数据表来添加行,但不要清除原始表:

       Dim dt As New DataTable ' Assume this is your populated table
       Dim dataRows As DataRow() = dt.Select("[Calendar year TEXT] = '2020'")
       Dim dtResults As DataTable = dt.Clone()
       For Each row As DataRow In dr
           dtResults.ImportRow(row)
       Next
      

    请记住,您对 dtResults 中的行所做的任何更改也会影响 dt 中的行,因为它们都包含相同的数据

    1. 根据表的大小以及是否真的要丢弃不匹配的行,您可以删除所有不匹配的行,然后处理结果:

       Dim i As Integer = dt.Rows.Count - 1
       While i >= 0
           If dt(i).Item("Calendar") <> "Your test here" Then dt.Rows.Remove(dt(i))
           i -= 1
       End While
      

    【讨论】:

    • 我已经尝试了第 2 点的代码,但它一直给我一个例外:“输入数组比此表中的列数长”。我还调试了两个数据表,它们包含相同的列。
    • 如果您不需要完整的原始数据表,您的第 3 点是一个很好的解决方法。
    • @Abdul-HadiBhat - 你是对的,对不起。我已经更新了第 2 点的代码,所以它现在应该可以工作了
    猜你喜欢
    • 2016-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-13
    • 1970-01-01
    • 1970-01-01
    • 2014-03-04
    相关资源
    最近更新 更多