2016-05-13 11 views
1

BindingSourceにバインドされたDataGridViewとコントロール(編集用)があります。すべてが正常に動作します。DataGridViewのエントリをクリックすると、バインドされたエディットコントロールが選択したアイテムを表示および編集します。私ができるようにしたいのは、新しく作成されたアイテムをDataGridViewで自動的に選択し、編集コントロールも新しく作成したデータにバインドすることです。これを行うには、私はそうのように、DataGridView.RowsAddedのためのハンドラを実装している:これは、新しく作成されたアイテムがDataGridViewの中で選択された状態で、表面的に動作しますDataGridViewプログラムによる新しい項目の選択では、他のデータバインドコントロールが更新されません。

private void dataGridViewBeasts_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e) 
{ 
    // Force newly created items to be selected 
    dataGridViewBeasts.Rows[e.RowIndex].Selected = true; 
} 

。ただし、編集コントロールは、新しい項目を作成する前に選択されていた項目を参照するために使用されます。新しく選択したアイテムを指し示すように、どうすればよいですか?

+0

どのようにあなたが他のイベントをコーディングしたのですか?クリックしたイベントまたは選択したイベントを選択しましたか?後者は2番目のケースでもうまくいきます。 – TaW

+0

他のどのイベントが起こっているのか分かりません。新しい項目は、バインドされたEntity Framework DbContextにアイテムを追加することによって作成されます。いずれにしてもあなたの回答をありがとうございます:) –

+0

あなたは書き込みました:DataGridViewのエントリに_clickingがあります._これは、ClickイベントまたはMouseClickイベントをコーディングしたように見えます。あなたは? – TaW

答えて

1

仮定:

あなたはDataGridViewに直接ではなく、根本的なDataSourceに新しい行を追加しています。

結果:

あなたがここに直面している問題は、DataGridView.CurrentRowバウンド項目に関連付けられていますあなたの編集コントロールのすべてを拘束ということです - get唯一のプロパティで、中に矢印で示されています行ヘッダー列。

CurrentRowを変更することについては、Selecting a row in a DataGridView and having the arrow on the row header followで説明しています。

したがって、新しく追加された行のCurrentCellCell[0]を設定するだけで簡単です。例外...

DataGridView.RowsAddedイベントのCurrentCellの設定は失敗します。概念的には、新しい行はCurrentRowになります。しかし、そのイベントが終了すると、デバッグはCurrentRowが直ちに以前の値にリセットされることを示します。代わりに、新しい行を追加するコードの後に​​CurrentCellを設定します。たとえばBindingSource.DataSourceとき:

DataTableです:

DataTable dt = theBindingSource.DataSource as DataTable; 
dt.Rows.Add("New Row", "9000"); 

dataGridView1.CurrentCell = dataGridView1.Rows[dataGridView1.Rows.Count - 1].Cells[0]; 

またはList<Example>

List<Example> list = theBindingSource.DataSource as List<Example>; 
list.Add(new Example() { Foo = "New Row", Bar = "9000" }); 

// Reset the bindings. 
dataGridView1.DataSource = null; 
dataGridView1.DataSource = theBindingSource; 

dataGridView1.CurrentCell = dataGridView1.Rows[dataGridView1.Rows.Count - 1].Cells[0]; 
+0

魅力的な作品です。ありがとうございました! –

関連する問題