私はこの同じ問題を主張しているbazillionの投稿を見てきたことを約束しますので、まだ私が困惑していることを私に許してください。VB.net DataRow.RowStateは更新されません
強く型付けされたデータセットを含むVS2008スマートデバイスプロジェクトがあります。ユーザーは、データセットに新しいレコードを作成するたびに、値を入力して保存することができます。ユーザーが値を編集したい場合は、行を編集するために入力可能な値を含む複数のコンボボックスがあるモーダル子フォームが表示されます。各コンボボックスは、以下の方法で、子フォームのコンストラクタにバインドされている:
With cmbSize
.DataSource = frmMain.dstConfig.Sizes
.DisplayMember = "Display"
.ValueMember = "Value"
.DataBindings.Add("SelectedValue", trowNewRow, "SIZE", True, DataSourceUpdateMode.OnPropertyChanged)
End With
dstConfig制約を含む表のデータセットです。ソースの表示と値のメンバーにバインドするとうまくいきます。
trowNewRowは、ユーザーが編集プロシージャを開始したときにメインフォームから伝達されたデータセットの行への参照です。行をパラメータ「ByRef」として渡すことによって、子フォームへの参照です。強タイピングは保存されます。私には、これが起きたときに気づいていない何らかの切り離しがあるかもしれません。私は、データセットに対して「選択」プロシージャを実行し、編集される行に対応する一意のIDフィールドでフィルタリングすることによって、参照を渡します。結果は、データセットと同じスキーマの厳密に型指定された行の単一項目配列で、最初の(そして唯一の)項目をオブジェクトとして渡します。
ユーザーが[OK]ボタンをクリックして変更を送信すると、変更が実際に実行されたかどうかを評価する手順がトリガされます。私がこれを行うと思った最良の方法は、trowNewRowのRowStateをチェックすることでした。ただし、RowStateは変更に関係なく「追加済み」のままです。行の値を手動でチェックすると、実際に変更が記録されたことを示します。私は、trowNewRowのAcceptChangesプロシージャが、自分のコードで明示的に呼び出されていないことを確認しました。
私は次のことを試してみました: 1)コンボボックスBindingManagerBaseは 4オブジェクト上EndCurrentEdit手順を呼び出す)を手動でコンボボックス 3にWriteValueを実行する)trowNewRow 2のEndEdit手順を呼び出します。 )上記のすべての組み合わせ
ありがとうございました任意のアイデアやソリューションです。
これら2つの長い段落の代わりに関連するコードは、問題をよりよく説明し、退屈さを減らすかもしれません。 rowstateが追加されている場合は、dataadapterがデータベースをまだ更新していないことを意味します。それは新生であるため、保存するまで新しい行が残ります(編集/変更の回数に関係なく)。 – Plutonix