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変更のチェックを使用できるイベントを使用できます。そして、この後CellEndEdit、UpdateTodatabase関数を実行してくださいCellValidatingCellEndEdit

MSDN DataGridView.CellValidating イベント

于 2013-03-14T18:04:16.597 に答える