【发布时间】:2016-12-09 11:45:56
【问题描述】:
我有一个 DataGridView,它在我的项目中使用 DataTable 作为源 (dtOrders)。我正在尝试使用已编辑的行更新 dtOrders 并让 DataGridView 显示更新的行。我正在使用从BackGroundWorker (bgwWriteToDatabase) 调用的以下代码
Public r as ArrayList = New ArrayList
Private Sub UpdateOrderTable()
Try
r.Add(RowNum)
r.Add(bwOrderID)
r.Add(bwClientID)
r.Add(bwMaterials)
r.Add(bwInstaller)
r.Add(bwMaterialsCost)
r.Add(bwInstallerCost)
r.Add(bwElectricalCosts)
r.Add(bwPipeFittingCosts)
r.Add(bwSundriesCosts)
r.Add(bwTotalCost)
r.Add(bwNotes)
dtOrders.Rows(r(0))("ID") = r(1)
dtOrders.Rows(r(0))("ClientRef") = r(2)
dtOrders.Rows(r(0))("Materials") = r(3)
dtOrders.Rows(r(0))("Installer") = r(4)
dtOrders.Rows(r(0))("MaterialsCost") = r(5)
dtOrders.Rows(r(0))("InstallersCosts") = r(6)
dtOrders.Rows(r(0))("ElectricalWork") = r(7)
dtOrders.Rows(r(0))("PipeFittingValves") = r(8)
dtOrders.Rows(r(0))("Sundries") = r(9)
dtOrders.Rows(r(0))("TotalCosts") = r(10)
dtOrders.Rows(r(0))("Notes") = r(11)
bgwWriteToDatabase.ReportProgress(10, 10)
Catch ex As Exception
Debug.Print(ex.Message.ToString)
Errorbits(3) = True
End Try
End Sub
Private Sub bgwWriteToDatabase_ProgressChanged(sender As Object, e As System.ComponentModel.ProgressChangedEventArgs) Handles bgwWriteToDatabase.ProgressChanged
If e.ProgressPercentage = 10 Then
dgvViewOrders.DataSource = dtOrders
End If
End Sub
只要在表单上按下提交按钮,就会执行代码。代码第一次运行时,DataGridView 完美更新,正确显示新信息,一切正常。
第二次按下提交按钮时,DataGridView 上的信息不会更新。我很难理解为什么它第一次有效,但第二次无效。
我已经调试过,代码在第一次运行时没有错误,在第二次运行时也没有错误,BackGroundWorker 在两个周期中以相同的方式执行,但在第二次运行时不会产生更新。
我在这里遗漏了什么明显的东西吗?
【问题讨论】:
-
我只是想......我没有清除我的arraylist..我想知道它是否被添加到末尾
-
在那个代码中不需要arraylist。您可以将数据添加到 DataRow,而无需先将 var 存储在其他集合中。您也不需要逐行更新数据库。
-
我将
rArrayList作为参数在表单关闭时传递出去,所以在这种情况下我确实需要它。在上面的示例中,我只更新了一行,尽管我可以使用with命令让它看起来更简单
标签: vb.net winforms datagridview