nettoon493
nettoon493

Reputation: 18433

How Update cell in datagridview after enter? vb.net

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

Answers (1)

Fabio
Fabio

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

Related Questions