选择新添加的Row - DataGridView和BindingSource

时间:2009-11-03 00:18:58

标签: c# winforms datagridview sql-server-ce bindingsource

我正在向绑定到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中选择这个新添加的行。

有可能以某种方式吗?

5 个答案:

答案 0 :(得分:7)

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

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

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

答案 1 :(得分:1)

有可能吗?我会说yes

以下是与之相关的文章: DataGridView and BindingSource(关于乔尔的论坛)

答案 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;
}