Select newly added Row - DataGridView and BindingS

2019-01-26 16:38发布

I'm adding a new Row to a BindingSource that is Bound to a DataGridView

source.AddNew();

After this, use BindingSource to get the newly added row is return the next row in the DataGridView when its sorted.

ROW "A"
ROW "B" <- myBindingSource.AddNew();
ROW "C"

myBindingSource.Current gives ROW "C". (it became the selected row in the DataGridView)

I need this because I want to update just the newly added row

            DataRowView drv = (DataRowView)myBindingSource.Current;
            myTableAdapter.Update(drv.Row);

and not the entire table.

            myTableAdapter.Update(myDataSet.myTable);

and also, I would like to have this newly added line selected in the DataGridView after insertion.

is it possible in some way?

5条回答
够拽才男人
2楼-- · 2019-01-26 17:14

Is it possible? I would say yes.

Here's an aricle related to it:
DataGridView and BindingSource (on Joel's Forum)

查看更多
smile是对你的礼貌
3楼-- · 2019-01-26 17:33

Dont know id its the best solution but for instance looks better than iterate.

        DataRowView drv = (DataRowView)source.AddNew();
        grupoTableAdapter.Update(drv.Row);
        grupoBindingSource.Position = grupoBindingSource.Find("ID", drv.Row.ItemArray[0]);
查看更多
女痞
4楼-- · 2019-01-26 17:36

You've already identified one way to accomplish this. Another way to accomplish it is to ignore the UI completely:

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

Of course, this calls Update on all added rows in the table, not the one that was just added, so if you have some crazy scenario where you have two different ways of adding new rows to the table it won't work.

查看更多
虎瘦雄心在
5楼-- · 2019-01-26 17:39

Extending from Oliver Friedrich's answer, the function when created using the controls's property as shown in the designer will look like:

private void drv_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
    drv.Rows[e.RowIndex].Selected = true;
} 
查看更多
手持菜刀,她持情操
6楼-- · 2019-01-26 17:40

Use the events from the DataGridView like this for this task:

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

That marks the newly added row as the selected.

查看更多
登录 后发表回答