【发布时间】:2021-06-21 06:49:01
【问题描述】:
VB.net 应用程序以编程方式更改数据网格视图中的值。这些值都是应有的,但保存例程(dtShipments 是作为 datagridview 源的数据表) 将 dtChanges 调暗为 DataTable = dtShipments.getchanges() 如果不止一个发生了变化,dtChanges 总是会丢失最后一行。
在更改单元格值的例程中,我尝试过 DatagridView1.EndEdit 和 DatagridView1.CommitEdit,但行为是相同的。我什至尝试添加一个 SendKeys.Send(vbTab) 行,因为在手动进行更改时按 Tab 键足以让所有更改显示在 .GetChanges 中。
我错过了什么?
每个请求的代码:
Private Sub btnAssign_Click(sender As Object, e As EventArgs) Handles btnAssign.Click
strModErr = "Form1_btnAssign_Click"
Dim sTruck As String = ""
Try
sTruck = Me.DataGridView2.SelectedCells(0).Value.ToString
For Each row As DataGridViewRow In DataGridView1.SelectedRows
row.Cells("Truck").Value = sTruck
Next
DataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit)
Catch ex As Exception
WriteErrorToLog(Err.Number, strModErr + " - " + Err.Description)
End Try
End Sub
Private Function SaveChanges() As Boolean
strModErr = "Form1_SaveChanges"
Dim Conn As New SqlConnection(My.Settings.SQLConnectionString)
Dim sSQL As String = "UPDATE fs_Shipments SET Truck = @Truck, Stop = @Stop WHERE SalesOrder = @SO"
Dim cmd As New SqlCommand(sSQL, Conn)
Dim sSO, sTruck As String
Dim iStop As Integer = 0
Try
DataGridView1.EndEdit()
DataGridView1.ClearSelection()
Dim dtChanges As DataTable = dtShipments.getchanges() 'DataRowState.Modified
If Not dtChanges Is Nothing Then
Conn.Open()
For Each row As DataRow In dtChanges.Rows
sSO = row("SalesOrder").ToString
sTruck = row("Truck").ToString
iStop = CInt(row("Stop").ToString)
With cmd.Parameters
.Clear()
.AddWithValue("@SO", sSO)
.AddWithValue("@Truck", sTruck)
.AddWithValue("@Stop", iStop)
End With
cmd.ExecuteNonQuery()
Next
End If
Return True
Catch ex As Exception
WriteErrorToLog(Err.Number, strModErr + " - " + Err.Description)
Return False
End Try
End Function
【问题讨论】:
-
DataGridView.Rows 集合中的每一行都有一个
DataBoundItem属性。获取该引用并更改其列的值。无论如何,您应该在第一次加载 DataTable 时调用AcceptChanges(),否则状态已经从一开始就设置好了,所以状态可能看起来没有改变,GetChanges()不会返回一个或多个在其视图中未更改状态的行集合中的行。 -
请注意,
DataRowState.Added比DataRowState.Modified强。 -
你能提供一个重现这个的代码示例吗?我无法重现您所描述的内容。
-
根据请求添加的代码。
标签: vb.net datagridview