Reputation: 18433
i want update value from datagridview to sql after enter on cell. but it don't work.
this code:
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
Thanks for tour time. :)
Upvotes: 0
Views: 8692
Reputation: 32455
You can use Events DataGridView.CellBeginEdit
and DataGRidView.CellEndEdit
Then value updates after pressing Enter or when you leaving a current cell(click on other cell..)
In the handler of DataGridView.CellBeginEdit
In this handler we just save a current(old) value of cell
In this example I using a DataGridView.Tag
property as place where to save a old value
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
Then in handler of 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
Or you can use dgv.CellValidating
event, where you can use your check for new value and Cancel
changes if you need. And after this in CellEndEdit
jut run your UpdateTodatabase function
Remember CellValidating
occur before CellEndEdit
MSDN DataGridView.CellValidating Event
Upvotes: 1