Вызов grid.CurrentRow(0)
не сработает. grid.CurrentRow
возвращает datagridviewrow, но, как говорится в сообщении об ошибке, это не может быть проиндексировано (означает «не может быть числа в скобках после него»), поскольку оно не имеет свойства по умолчанию (означает свойство, которое возвращается, когда разработчик использует только название). Некоторые вещи имеют свойства по умолчанию; например, DataRow (из таблицы данных) имеет свойство .Items
, представляющее значения столбцов. .Items
- это свойство по умолчанию, означающее, что myDatarow.Items(7)
и myDataRow(7)
делают одно и то же. DataGridViewRow не имеет ни одного из своих свойств, помеченных как свойства по умолчанию, поэтому вам нужно указать одно из его свойств
Возможно, вы имели в виду
grid.CurrentRow.Cells(0).Value
Сейчас самое время упомянуть что это не тот способ, которым MS намеревался использовать представление данных. Было бы лучше связать вашу сетку с датируемой таблицей, а затем вытащить нужные элементы данных из таблицы данных.
Вы также можете, если ваша сетка связана с данными:
DirectCast(grid.CurrentRow.DataBoundItem, DataRowView)(0)
Я бы порекомендовал убедиться, что вы не разрешаете пользователю изменять порядок столбцов в DGV. Если вы это сделаете, то рассмотрите одно из:
grid.CurrentRow.Cells("id").Value
DirectCast(grid.CurrentRow.DataBoundItem, DataRowView)("id")