1

私はこのコードを持っています:

 Protected Sub GridView1_RowUpdating(ByVal sender As Object, ByVal e As GridViewUpdateEventArgs) Handles GridView1.RowUpdating
    Dim strPersonID As String = DirectCast(GridView1.Rows(e.RowIndex).FindControl("TextBox1"), TextBox).Text
    Dim s As String=e.NewValues[1].ToString()
    Dim strLastName As String = DirectCast(GridView1.Rows(e.RowIndex).FindControl("TextBox2"), TextBox).Text
    Dim command As SqlCommand = New SqlCommand("updatetest", cn)
    command.CommandType = CommandType.StoredProcedure
    command.Parameters.AddWithValue("@pid", strPersonID)
    command.Parameters.AddWithValue("@pfirstname", strLastName)
    If cn.State = ConnectionState.Closed Then
        cn.Open()
    End If
    command.ExecuteNonQuery()
    If cn.State = ConnectionState.Open Then
        cn.Close()
    End If
End Sub

問題は、rowUpdating イベントが古い値を返していることです。更新のための新しい値を取得するにはどうすればよいですか? プログラミングがイベント RowUpdated を実行していないことに注意してください。

助けはありますか?

ありがとうございました :)

4

1 に答える 1

0

イベントが発生したときRowUpdating、変更はまだデータソースにコミットされていません。これは、入力を検証し、必要に応じて変更を防止する機会を提供するように設計されたイベントです。

GridViewUpdateEventArgsには 2 つの辞書がありOldValuesNewValues. 次のようにループすることで、何が変更されたかを把握できます。

For Each key As String In e.OldValues.Keys
    If e.OldValues(key) <> e.NewValues(key) Then
        MessageBox.Show(key & " has changed: Old Value = " & e.OldValues(key) & "; New Value = " & e.NewValues(key))
    End if
Next

そこはブレインコンパイラでしたが、構文は正しいと思います。

于 2013-08-20T07:09:09.447 に答える