2009-04-08 23 views
0

私はC#のフレームワークの理解に取り組んでいます。フォーム上に簡単な追加/編集、保存/キャンセル(および終了)ボタンがあるフォームがあります。フォームにはグリッドとデータテーブルがバインドされています(データテーブルは、フォームの期間中はスコープの目的でフォームに残るフィールドです)。DataTable.RejectChanges()とフォームのテキストボックスコントロールをリフレッシュ

DataTableの各列にバインドされた3つの単純なテキストボックスコントロールもフォームにあります。グリッドをスクロールすると、テキストボックスの詳細が自動的に更新されます。完璧です。

私は調整がうまく機能していますが、編集/キャンセルに失敗しました。次の点に関しては失敗する。

グリッドを3行表示します(列1は簡単な「説明」です)。最初の行の値はTestです(したがって、フォームに対応するバインドされた個々のテキストボックスコントロールが表示されます)。編集ボタンをクリックして、個々のテキストボックス(データグリッドではない)を変更し、Test changed valueに変更できるようになりました。

ここで、「キャンセル」ボタンをクリックして、次のことを願います。グリッドが新しい値で更新されず、個々のテキストボックスコントロールが元のTest値に戻ります。

キャンセルボタンでは、MyDataTable.RejectChanges()を発行し、グリッドは元のTestの値を正しく保持しますが、テキストボックスコントロールはTest changed valueの内容を保持します。私はこの同じRejectChanges()を追加/キャンセルの組み合わせ中に呼び出すと、すべてが完璧に動作します。

追加/キャンセル時に同様のシミュレーションを行うために、グリッドを明示的にデータテーブル内の最後の有効な行に強制しています。これは、テキストボックスを自動的に更新します... MyDataGridView.CurrentRowの呼び出し/私が見ることができない何かが起こる。そのEDIT以来、私はテーブルから行を削除していません( "Add"から一時的に)、そして拒否(削除)し、MyDataGridView.CurrentCell = [0, LastDataRowInDataTable]経由で行の変更を強制します。

どのような考えも大きいでしょう。

+0

これについての回答を見つけることに興味がある場合は、追加/編集と保存/キャンセルイベントハンドラのソースを投稿すると、実行しようとしていることが明確になります。 –

+0

キャンセルボタンのプライマリダンプがあります。 MyTable.RejectChanges(); //我々は追加モードにあった場合は、(電流モード== ADDMODE)場合は常にLAST にリセット (MyTable.Rows.Count> 0){場合 //カウントが1ベースではないゼロベースのコンテキスト です //テーブルのゼロベースの行にフォーカスを移動します MyGrid.Rows [MyTable.Rows.Count - 1] .Selected = true; // done、出る return; } この後に何をしても、テキストボックスは事前に編集された値に更新されません – DRapp

答えて

2

RejectChangesを呼び出した後、2つのコントロール(DatetimepickerTextbox)を更新しようとしているときに同様の問題が発生しました。これは、コントロールのBindingSourceのメソッドResetCurrentItem()を呼び出すことによって解決されました。

関連する問題