Событие добавления строки DataGridView

Я использую DataGridView и привязываю List к DataSource.

У меня уже есть правильные столбцы, и я точно сопоставляю поля. То, что я пытаюсь сделать, - это обработать событие RowAdded или RowDataBound (например, в aspx GridView).

Единственное событие, которое я нашел, - это RowsAdded, но независимо от того, сколько у меня элементов, оно запускается только 4 раза в первый раз, когда я привязываюсь, и два раза в другое время со значениями

e.RowCount: 1 e.RowIndex: 0 e.RowCount: [n-1] e.RowIndex: 1 * где n - число моих элементов

Есть ли способ, которым я могу получить дескриптор для каждого элемента?

EDIT: без изменения метода привязки DataSource =

Ответ 1

Я столкнулся с этой проблемой. Вы можете получить индекс и диапазон строк, которые были добавлены из аргументов событий, переданных в обработчик событий RowsAdded. Используйте эту информацию для прокрутки каждой из добавленных строк. e.RowIndex и e.RowCount позволят вам определить добавленные строки.

private void DataGridView1_RowsAdded(object sender, System.Windows.Forms.DataGridViewRowsAddedEventArgs e)
{
    for (int index = e.RowIndex; index <= e.RowIndex + e.RowCount - 1; index++) {
        DataGridViewRow row = DataGridView1.Rows[index];

        // Do something with the added row here
        // Raise a custom RowAdded event if you want that passes individual rows.
    }
}

Если вы хотите, вы можете наследовать datagridview и создать свою собственную сетку, которая выдает событие "RowAdded" внутри цикла выше.

Ответ 2

Самый простой способ для меня - использовать System.Windows.Forms.BindingSource. Добавьте к этому список, а затем используйте BindingSource в качестве источника данных сетки. Затем это действует как промежуток для сетки и данных.

Есть несколько событий, которые затем могут быть использованы из bindingsouce. Одним из них является AddingNew. Вы также можете использовать его для захвата добавляемых или удаляемых строк, а также нескольких других вещей.