选择新添加的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; }