1

DataSet/でバインドされたXceedグリッドを使用していDataTableます。重要なのは、グリッドに新しいデータをロードする前に変更が加えられたかどうかを知る必要があるため、保存しないと変更が失われることです。

しかし、どちらDataSetDataTable関数もgetChanges([DataRowState]) 正しいものを返しません:S

dataColumnChangeEvent時々呼び出されることがわかりましたが、そうではありません。これらは、変更が関数dataRowChangeEventに保存されない場合です。getChanges()

これは、グリッドのセルのもう一方を選択する代わりに、編集セルでグリッドの外をクリックすると発生します。

また、データが変更されても、調べてみましたrowStateUnchangedS

何か案は?

4

1 に答える 1

0

素晴らしい!私は最終的に解決策を見つけました。

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」だけです。 -クリック」。

それで、私はそれがどのように振る舞うかを説明しました。

しかし、それはとても奇妙なことです。誰かがそのような振る舞いを説明してくれたら幸いです。

于 2012-08-20T15:09:04.283 に答える