C# 选择新添加的行-DataGridView和BindingSource

C# 选择新添加的行-DataGridView和BindingSource,c#,winforms,datagridview,sql-server-ce,bindingsource,C#,Winforms,Datagridview,Sql Server Ce,Bindingsource,我正在向绑定到DataGridView的BindingSource添加新行 source.AddNew(); 在此之后,使用BindingSource获取新添加的行,并在其排序时返回DataGridView中的下一行 ROW "A" ROW "B" <- myBindingSource.AddNew(); ROW "C" 而不是整张桌子 myTableAdapter.Update(myDataSet.myTable); 另外,我希望在插入后在DataGridV

我正在向绑定到DataGridView的BindingSource添加新行

source.AddNew();
在此之后,使用BindingSource获取新添加的行,并在其排序时返回DataGridView中的下一行

ROW "A"
ROW "B" <- myBindingSource.AddNew();
ROW "C"
而不是整张桌子

            myTableAdapter.Update(myDataSet.myTable);
另外,我希望在插入后在DataGridView中选择这个新添加的行


在某种程度上可能吗?

可能吗?我会说

这里有一个与之相关的例子:

(在Joel的论坛上)

不知道它是最好的解决方案,但例如,它看起来比iterate更好

        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
,因此,如果您遇到一些疯狂的情况,即您有两种不同的方式向表中添加新行,它将不起作用。

将DataGridView中的事件用于此任务:

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

将新添加的行标记为选中行。

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

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

同样的问题,它使DataGridView绑定到相应地选择新添加的行,即使任何列已排序。是的,但它会迭代,并且不会在视图中选择新添加的行。无论如何,在某些情况下可能会有所帮助。谢谢你的帮助。
private void drv_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
    drv.Rows[e.RowIndex].Selected = true;
}