将行从一个数据表复制到另一个数据表不显示任何内容

Copying Rows from One DataTable to another Displays Nothing

我正在尝试将行从一个 DataTable 复制到另一个,但只复制数据尚未保存到数据库的行 table。

这方面的 SQL 工作正常,它返回正确的列数,但是,当我将找到的行添加到我的第二个 DataTable 并将其设置为 DataSource 对于我的网格,没有显示任何数据,尽管已经添加了一行,因为行选择器是可见的。

我做错了什么,为什么数据没有被复制?

lftable = New DataTable

Try
  For Each dc As DataColumn In lineTable.Columns
    lftable.Columns.Add()
  Next

  Dim ds As New DataSet

  For Each row As DataRow In lineTable.Rows
     Dim da As New OleDbDataAdapter("SELECT * FROM [Order_Freight] WHERE [Order_Number] = ? AND [Product_Code] <> ?", con)
     da.SelectCommand.Parameters.Add("@num", OleDbType.Integer).Value = orderNum
     da.SelectCommand.Parameters.Add("@prod", OleDbType.VarChar).Value = row.Item("Product_Code")
     da.Fill(ds)

     For Each dr As DataRow In ds.Tables(0).Rows
        Dim nRow = lftable.Rows.Add()
        nRow.ItemArray = dr.ItemArray()
     Next
 Next

 ugProducts.DataSource = lfTable

分配 DataSource

后的网格截图

正确填写栏目:

For Each dc As DataColumn In lineTable.Columns
    lftable.Columns.Add(new DataColumn(dc.ColumnName, dc.DataType)); 
Next

您可以使用 Row.Add 函数的重载,它允许您直接提供 ItemArray

For Each dr As DataRow In ds.Tables(0).Rows
      lftable.Rows.Add(dr.ItemArray)
      'nRow.ItemArray = dr.ItemArray() <-- remove
Next

代替此代码:

   ' For Each dc As DataColumn In lineTable.Columns
      '  lftable.Columns.Add()   >
        '  lftable.Columns.Add(dc) 
     ' Next

使用 DataTable.Clone() 仅将 lineTable 中的列复制到 lftable

lftable = lineTable.Clone();

然后

  For Each dr As DataRow In ds.Tables(0).Rows
         lftable.Rows.Add( dr.ItemArray)
     Next