4

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

有可能以某种方式吗?

4

5 回答 5

8

像这样使用 DataGridView 中的事件来完成此任务:

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

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

于 2010-01-22T08:31:45.427 回答
1

是否可以?我会说yes

这是一篇与之相关的文章:
DataGridView and BindingSource(在 Joel 的论坛上)

于 2009-11-03T00:35:48.973 回答
1

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

        DataRowView drv = (DataRowView)source.AddNew();
        grupoTableAdapter.Update(drv.Row);
        grupoBindingSource.Position = grupoBindingSource.Find("ID", drv.Row.ItemArray[0]);
于 2009-11-03T02:13:18.247 回答
0

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

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

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

于 2009-11-03T02:41:53.197 回答
0

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

private void drv_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
    drv.Rows[e.RowIndex].Selected = true;
} 
于 2017-03-17T11:06:05.180 回答