此代码在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
请告诉我代码中的问题。
答案 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,因为你只是杀死异常(没有消息,没有日志),因此你永远不会知道这个导入是否有错误。最后,您将发运可能会给最终用户带来错误结果的产品。