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

Arrays 将行从一个数据表复制到另一个数据表不会显示任何内容,arrays,vb.net,datatable,ultrawingrid,Arrays,Vb.net,Datatable,Ultrawingrid,我试图将行从一个DataTable复制到另一个中,但只将数据尚未保存到数据库表中的行复制 这方面的SQL工作正常,它返回了正确的列数,但是,当我将找到的行添加到第二个DataTable并将其设置为网格的DataSource时,没有显示任何数据,尽管已经添加了一行,因为行选择器是可见的 我做错了什么,为什么数据没有被复制 lftable = New DataTable Try For Each dc As DataColumn In lineTable.Columns lftable

我试图将行从一个
DataTable
复制到另一个
中,但只将数据尚未保存到数据库表中的行复制

这方面的
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
lftable=新数据表
尝试
对于lineTable.Columns中的每个dc作为DataColumn
lftable.Columns.Add()
下一个
Dim ds作为新数据集
对于lineTable.Rows中作为DataRow的每一行
将da设置为新的OLEDB数据适配器(“从[Order_Freight]中选择*,其中[Order_Number]=?和[Product_Code]?”,con)
da.SelectCommand.Parameters.Add(“@num”,OleDbType.Integer)。Value=orderNum
da.SelectCommand.Parameters.Add(“@prod”,OleDbType.VarChar).Value=row.Item(“产品代码”)
da.填充(ds)
对于ds.Tables(0.Rows)中的每个dr As数据行
Dim nRow=lftable.Rows.Add()
nRow.ItemArray=dr.ItemArray()
下一个
下一个
ugProducts.DataSource=lfTable
网格分配
数据源后的屏幕截图


正确填写各列:

For Each dc As DataColumn In lineTable.Columns
    lftable.Columns.Add(new DataColumn(dc.ColumnName, dc.DataType)); 
Next
您可以使用
行的重载。Add
函数允许您直接提供
ItemArray

For Each dr As DataRow In ds.Tables(0).Rows
      lftable.Rows.Add(dr.ItemArray)
      'nRow.ItemArray = dr.ItemArray() <-- remove
Next
ds.Tables(0.Rows)中的每个dr As数据行的

lftable.Rows.Add(dr.ItemArray)

'nRow.ItemArray=dr.ItemArray()而不是此代码:

   ' 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

@亚历克斯。编译错误-表达式不生成值是的,我的评论是胡说八道。请看我的答案。您得到的结果是什么?与图1中的结果相同。调用
da.Fill(ds)
时,表(0)
已填充。2)我只在
ds.Tables(0)行上循环一次?它位于
行表内。行
更新了我的回答这会出现错误“列'Product_ID'已属于另一个数据表”这将不起作用@David必须创建一个新的DataColumn对象并将其添加到集合中,如
lftable.Columns.add(newDataColumn(dc.ColumnName,dc.DataType))@AlexB。“无法将System.Data.DataColumn类型的值转换为'String'类型”