将数据添加到DataTable

时间:2017-01-04 13:11:53

标签: vb.net datatable

此代码在arraylist中记录插入的ID,当按下按钮时,它应该为该数组创建循环并从数组中获取每个ID的数据并将其放入Datatable并在循环到数据表时添加新数据最终在datagridview中显示它。 当我插入一条记录时,结果中的问题很好但是当我插入多个datagridview只显示最后一条记录时,我做错了什么?!!

在Mainform中

Public Inserted_record_hold_dt As New DataTable
Public Inserted_record_dt As New DataTable
Public Sub Addcolumnstodatagrid()
    Inserted_record_dt.Columns.Add("ID")
    Inserted_record_dt.Columns(0).AutoIncrement = True

    Inserted_record_dt.Columns.Add("drawingname")
    Inserted_record_dt.Columns.Add("serial")

End Sub

并在main_Load中调用它

Addcolumnstodatagrid()

当点击循环播放已经添加了最新ID的数组列表时,在show按钮中显示

Private Sub show_btn_Click(sender As System.Object, e As System.EventArgs) Handles show_btn.Click
    Dim InsertedID As Integer
    Inserted_record_dt.Clear()
    Dim R As DataRow = Inserted_record_dt.NewRow

    'Loop For each ID in the array "Inserted_List_Array"
    For Each InsertedID In mainadd.Inserted_List_Array
        'MsgBox(InsertedID.ToString)
        Dim cmd As New SqlCommand("select drawingname , serial from main where drawingid = '" & InsertedID & "'", DBConnection)
        DBConnection.Open()
        Inserted_record_hold_dt.Load(cmd.ExecuteReader)
        Try

            R("drawingname") = Inserted_record_hold_dt.Rows(0).Item(0)
            R("serial") = Inserted_record_hold_dt.Rows(0).Item(1)
            Inserted_record_dt.Rows.Add(R)

        Catch
        End Try
        'MsgBox("added")
        DBConnection.Close()
        cmd = Nothing
        Inserted_record_hold_dt.Clear()
    Next
    sendmail.Show()
    sendmail.Mail_DGView.DataSource = Inserted_record_dt
End Sub

请告诉我代码中的问题。

1 个答案:

答案 0 :(得分:1)

你的错误是在循环外只声明R变量一次。通过这种方式,您可以连续替换DataRow的同一实例上的值,并始终插入相同的实例。

只需在循环中移动声明

即可
For Each InsertedID In mainadd.Inserted_List_Array
    ......
    Try
        Dim R As DataRow = Inserted_record_dt.NewRow
        R("drawingname") = Inserted_record_hold_dt.Rows(0).Item(0)
        R("serial") = Inserted_record_hold_dt.Rows(0).Item(1)
        Inserted_record_dt.Rows.Add(R)

    Catch
    ....
Next

另一个重要的事情是删除空的Try / Catch,因为你只是杀死异常(没有消息,没有日志),因此你永远不会知道这个导入是否有错误。最后,您将发运可能会给最终用户带来错误结果的产品。