我正在向绑定到DataGridView的BindingSource添加一个新行
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中选择这个新添加的行。
有可能以某种方式吗?
答案 0 :(得分:7)
使用DataGridView中的事件来执行此任务:
private void RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
this.Rows[e.RowIndex].Selected = true;
}
将新添加的行标记为选中。
答案 1 :(得分:1)
有可能吗?我会说yes
。
以下是与之相关的文章:
答案 2 :(得分:1)
不知道id是最好的解决方案,但例如看起来比迭代更好。
DataRowView drv = (DataRowView)source.AddNew();
grupoTableAdapter.Update(drv.Row);
grupoBindingSource.Position = grupoBindingSource.Find("ID", drv.Row.ItemArray[0]);
答案 3 :(得分:0)
您已经确定了实现此目标的一种方法。完成它的另一种方法是完全忽略UI:
foreach (DataRow r in myTable.AsEnumerable().Where(x => x.RowState == DataRowState.Added))
{
myTableAdapter.Update(r);
}
当然,这会在所有添加的行中调用Update
,而不是刚刚添加的行,所以如果你有一些疯狂的场景,你有两种不同的方式向表中添加新行将无效。
答案 4 :(得分:0)
根据Oliver Friedrich的回答,使用设计器中显示的控件属性创建的函数将如下所示:
private void drv_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
drv.Rows[e.RowIndex].Selected = true;
}