Выберите недавно добавленную строку — DataGridView и BindingSource.

Я добавляю новую строку в BindingSource, привязанную к DataGridView.

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 после вставки.

можно как-то?


person Ruben Trancoso    schedule 03.11.2009    source источник
comment
такой же вопрос stackoverflow.com/questions/191339/   -  person Ruben Trancoso    schedule 03.11.2009


Ответы (5)


Используйте для этой задачи события из DataGridView следующим образом:

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

Это помечает недавно добавленную строку как выбранную.

person Oliver Friedrich    schedule 22.01.2010

Является ли это возможным? Я бы сказал yes.

Вот статья, связанная с этим:
DataGridView и BindingSource ( на форуме Джоэла)

person o.k.w    schedule 03.11.2009

Не знаю, это лучшее решение, но, например, выглядит лучше, чем итерация.

        DataRowView drv = (DataRowView)source.AddNew();
        grupoTableAdapter.Update(drv.Row);
        grupoBindingSource.Position = grupoBindingSource.Find("ID", drv.Row.ItemArray[0]);
person Ruben Trancoso    schedule 03.11.2009
comment
это делает DataGridView, который привязан к выбору новой добавленной строки соответствующим образом, даже если какой-либо столбец отсортирован. - person Ruben Trancoso; 03.11.2009

Вы уже определили один из способов добиться этого. Другой способ сделать это — полностью игнорировать пользовательский интерфейс:

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

Конечно, это вызывает Update для всех добавленных строк в таблице, а не только что добавленной, поэтому, если у вас есть какой-то сумасшедший сценарий, в котором у вас есть два разных способа добавления новых строк в таблицу, это не будет работать.

person Robert Rossney    schedule 03.11.2009
comment
Да, но он повторяется и не делает новую добавленную строку выбранной в представлении. В любом случае может помочь в какой-то ситуации. Благодаря помощи. - person Ruben Trancoso; 03.11.2009

Исходя из ответа Оливера Фридриха, функция при создании с использованием свойства элементов управления, как показано в конструкторе, будет выглядеть так:

private void drv_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
    drv.Rows[e.RowIndex].Selected = true;
} 
person Ganesh Kamath - 'Code Frenzy'    schedule 17.03.2017