素晴らしい!私は最終的に解決策を見つけました。
dataRowChangeEventが呼び出されていないように見えても(後で説明します)
rowChangeEventの唯一のコードが以下のコードである場合、それは機能します:
Private Sub RowChanged(ByVal sender As Object, ByVal e As DataColumnChangeEventArgs)
If e.Row.RowState = DataRowState.Unchanged Then
e.Row.AcceptChanges()
e.Row.SetModified()
End If
End Sub
変更されていない状態で行をsetModified()することしかできないため、rowStateをチェックします。
setModified()のみを実行すると、編集されたセルの変更が削除されるため、AcceptChanges()を実行します。
SetModified(0)を実行します。これは、AcceptChanges()がRowStateをUnchangedのままにして、テーブルのgetChangesに取得されないためです。
編集:これは別の問題を引き起こします。dataAdapterはデータ行の元の値と現在の値を使用して更新、削除、挿入を行い、「acceptChanges」を実行してOriginalValueを現在の値に設定するため、削除と更新は機能しなくなります:(
- もっと -
イベントに参加していないようだと言ったとき、それは以下のコードが原因です:
Private Sub RowChanged(ByVal sender As Object, ByVal e As DataColumnChangeEventArgs)
If e.Row.RowState = DataRowState.Unchanged Then
e.Row.AcceptChanges()
e.Row.SetModified()
End If
MessageBox.Show("hasError=" & IIf(e.Row.HasErrors, "true ", "false ") & _
"; action=" & e.ProposedValue)
End Sub
メッセージボックスを表示せず、dataTableのgetChanges()..で変更を取得しません。
また、
MessageBox.Show("Changing")
以前のmessageBoxの代わりに、messageBoxを表示し、変更を正しく取得しますが、イベントが中断されるため、newProjectSelected =>でそれ以上進むことはありませんが、必要なのは「re」だけです。 -クリック」。
それで、私はそれがどのように振る舞うかを説明しました。
しかし、それはとても奇妙なことです。誰かがそのような振る舞いを説明してくれたら幸いです。