选择新添加的Row – DataGridView和BindingSource

我正在向绑定到DataGridView的BindingSource添加一个新的Row

source.AddNew(); 

在此之后,使用BindingSource获取新添加的行,当它排序时返回DataGridView中的下一行。

 ROW "A" ROW "B" <- myBindingSource.AddNew(); ROW "C" 

myBindingSource.Current给出ROW“C”。 (它成为DataGridView中的选定行)

我需要这个,因为我想只更新新添加的行

  DataRowView drv = (DataRowView)myBindingSource.Current; myTableAdapter.Update(drv.Row); 

而不是整个表。

  myTableAdapter.Update(myDataSet.myTable); 

而且,我想在插入后在DataGridView中选择这个新添加的行。

有可能吗?

像这样使用DataGridView中的事件来执行此任务:

 private void RowsAdded(object sender, DataGridViewRowsAddedEventArgs e) { this.Rows[e.RowIndex].Selected = true; } 

这标志着新添加的行作为选中。

可能吗? 我会说yes

这是与之相关的aricle:
DataGridView和BindingSource (在Joel的论坛上)

不知道id是最好的解决方案,但例如看起来比迭代更好。

  DataRowView drv = (DataRowView)source.AddNew(); grupoTableAdapter.Update(drv.Row); grupoBindingSource.Position = grupoBindingSource.Find("ID", drv.Row.ItemArray[0]); 

您已经确定了实现此目的的一种方法。 另一种完成它的方法是完全忽略UI:

 foreach (DataRow r in myTable.AsEnumerable().Where(x => x.RowState == DataRowState.Added)) { myTableAdapter.Update(r); } 

当然,这会调用表中所有已添加行的Update ,而不是刚刚添加的行,所以如果你有一些疯狂的场景,你有两种不同的方法向表添加新行,它将无法工作。

从Oliver Friedrich的答案扩展而来,使用设计器中显示的控件属性创建的函数将如下所示:

 private void drv_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e) { drv.Rows[e.RowIndex].Selected = true; }