2011-11-14 24 views
3

DataGridViewには、いくつかのDataGridViewComboBoxColumnがあります。列にはDataSourceが設定されているため、DataGridView自体にはDataSourceが設定されていませんが、選択する値が表示されます。私は手動で値をロード/保存します。行を変更せずにDataGridViewの変更を表示する方法

問題:コンボボックスの値を変更すると、別の行に移動するまで変更が反映されません。

その他の背景情報:アプリケーションの主な目的は、あるテーブルから別のテーブルにデータを移動することです。ある列ではテーブルのソースフィールドを選択し、次の列では別のテーブルの宛先フィールドを選択します。このアプリケーションの1つの機能は、行ヘッダーセルをクリックすると、その行で選択したソースフィールドの個別の値のリストが表示されることです。しかし、ソースフィールドを更新するとき、私は最初に行を離れるまで、行ヘッダーセルをクリックして正しい結果を得ることができません。

質問:最初に行を残さずに、変更をすぐに有効にする最も簡単な方法は何ですか?私はチェックボックスの列のためにこれを達成するために何かを実装しましたが、私が思いついた解決策はコンボボックスの列では機能しません。私はすべてのもののために働くものが欲しいです。

ありがとうございます!

編集:これを読んで自分自身に「これは悪い質問です」と思っている場合は、なぜ教えてもらえますか?私はあなたがそれをdownvoteするかどうか本当に気にしない...私はちょうど問題がこれと関係があるかどうかを理解したいと思うだろう "悪い質問"か、あなたは私があなたが信じる何かをすることを求めていると思いますか?スマートではありませんし、従うのは悪い習慣です。

+0

ええ...理由を説明し、この質問の心をdownvotedその男はでしょうか?言い換えれば、実際に役立つのですか? –

+1

Dunno。良い質問は簡潔なコードと英語が少ない傾向がありますが、大丈夫です。 Upvoted。 –

+0

@RitchMeltonスペイン語で書いた方がいいですか? :)しかし、真剣に、私は不明ではなかったし、まったく明確にすることなく*私は非常に素早く求めていた正確な答えを得た。だから私は質問がうまく書かれたと言うだろう。 –

答えて

4

私は、選択した値をすぐにコミットしたいと考えているので、これを達成するのに役立つかもしれません。 CurrentCellDirtyStateChangedに登録して、あなたが意図するものがあるかどうかを確認してください。

void dataGridView1_CurrentCellDirtyStateChanged(object sender, 
    EventArgs e) 
{ 
    if (dataGridView1.IsCurrentCellDirty) 
    { 
     dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit); 
    } 
} 
+0

パーフェクト!ありがとう、私はそれが何か単純でなければならないことを知っていた。 –

0

CellValidatedイベントをお探しですか?このイベントでは、手動でデータを保存することができます。

+0

おそらく...私はそれを試して、すぐにお知らせします。 –

+0

行を離れるときにそのイベントが発生します。私は値を変更すると即座に更新したい。 –

0

次の関数を使用してみてください:

dataGridView.RefreshEdit(); 
関連する問題