0

我想在单元格上输入后将值从 datagridview 更新为 sql。但它不起作用。

这段代码:

Private Sub dgvShow_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles dgvShow.KeyPress

Dim sb3 As New StringBuilder
Dim da2 As New SqlDataAdapter

For i As Integer = 0 To dgvShow.Rows.Count - 2
            If dgvShow.Rows(i).Cells(0).Value IsNot Nothing Then
                sb3.Remove(0, sb3.Length())
                sb3.Append("UPDATE PositionLevelWelfare ")
                sb3.Append("SET wfDivision=@wfDivision,wfSection=@wfSection,wfPosition=@wfPosition,wfBaht=@wfBaht")
                sb3.Append(" FROM PositionLevelWelfare pw")
                sb3.Append(" WHERE pw.Run=@Run")
                Dim SqlEdit As String = ""
                SqlEdit = sb3.ToString()

                da2.SelectCommand.CommandText = SqlEdit
                da2.SelectCommand.Parameters.Add("@Run", SqlDbType.NVarChar).Value = dgvShow.Rows(i).Cells(0).Value
                da2.SelectCommand.Parameters.Add("@wfDivision", SqlDbType.NVarChar).Value = dgvShow.Rows(i).Cells(1).Value
                da2.SelectCommand.Parameters.Add("@wfSection", SqlDbType.NVarChar).Value = dgvShow.Rows(i).Cells(2).Value
                da2.SelectCommand.Parameters.Add("@wfPosition", SqlDbType.NVarChar).Value = dgvShow.Rows(i).Cells(3).Value
                da2.SelectCommand.Parameters.Add("@wfBaht", SqlDbType.NVarChar).Value = dgvShow.Rows(i).Cells(4).Value
                da2.SelectCommand.ExecuteNonQuery()
                da2.SelectCommand.Parameters.Clear() 
            End If
        Next
End Sub

感谢您的游览时间。:)

4

1 回答 1

1

您可以在按 Enter 后或离开当前单元格时使用事件DataGridView.CellBeginEditDataGRidView.CellEndEdit 然后值更新(单击其他单元格..)

在处理程序中DataGridView.CellBeginEdit

在这个处理程序中,我们只保存单元格的当前(旧)值在这个例子中,我使用一个DataGridView.Tag属性作为保存旧值的地方

Private Sub dgv_CellBeginEdit(sender As Object, e As DataGridViewCellCancelEventArgs) Handles dgv.CellBeginEdit
    If e.RowIndex < 0 OrElse e.ColumnIndex < 0 Then Exit Sub
    Me.dgv.Tag = Me.dgv.CurrentCell.Value
End Sub

然后在处理程序中DataGRidView.CellEndEdit

Private Sub dgv_CellEndEdit(sender As Object, e As DataGridViewCellEventArgs) Handles dgv.CellEndEdit

    'Here you will get a new value of cell from dgv.CurrentCell.Value and compare with old value from dgv.Tag
    'You can add your checks for new value if you need. If some check fails just set
    dgv.CurrentCell.Value = dgv.Tag
    'If checks succeed then run your update to Database function with new value


End Sub

或者您可以使用dgv.CellValidating事件,如果需要,您可以在其中使用检查新值和Cancel更改。然后在CellEndEditjut 运行你的 UpdateTodatabase 函数记住CellValidating发生在之前CellEndEdit

MSDN DataGridView.CellValidating 事件

于 2013-03-14T18:04:16.597 回答