DataGridView新项目的编程选择不更新其他数据绑定控件

问题描述:

我有一个DataGridView和一些控件(用于编辑)所有绑定到BindingSource。一切都按预期工作 - 单击DataGridView中的条目,会导致绑定的编辑控件显示和编辑选定的项目。我希望能够做的是在DataGridView中自动选择新创建的项目,编辑控件也绑定到新创建的数据。要做到这一点,我实现了一个处理程序DataGridView.RowsAdded,像这样:DataGridView新项目的编程选择不更新其他数据绑定控件

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

这工作表面上,用在DataGridView被选择新建项。但是,编辑控件持续引用在创建新项目之前选择的项目。我如何鼓励他们指向新选择的项目?

+0

你是如何编写的其他事件?你选择了clicked事件还是choosechanged事件?后者将在第二种情况下工作。 – TaW

+0

我不确定你指的是哪个其他事件。新项目是通过向绑定的实体框架DbContext添加项目创建的,如果这有帮助的话?感谢您在任何情况下的回复:) –

+0

您写道:_clicking在DataGridView中的一个条目导致.._这听起来好像你已经编码的Click或MouseClick事件。你是否? – TaW

假设:

要添加新行标的DataSource,不是直接到DataGridView

结果:

您遇到这里的问题是,在所有被捆绑到DataGridView.CurrentRow绑定项的编辑控件的结合 - 这是一个get唯一的财产,并通过在箭头所示行标题列。

更改CurrentRowSelecting a row in a DataGridView and having the arrow on the row header follow中讨论。

所以它应该像设置新添加的行的CurrentCellCell[0]一样简单。除...

设置CurrentCellDataGridView.RowsAdded事件将失败。从概念上讲,它的工作原理 - 新的行成为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

工程就像一个魅力。谢谢! –