Событие добавления строки 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. Вы также можете использовать его для захвата добавляемых или удаляемых строк, а также нескольких других вещей.