MyGridView.Rows[e.RowIndex].DataItem
обычно должно работать, но я полагаю, что вы, вероятно, полагаетесь на состояние просмотра для сохранения данных сетки на постбеках. В этом случае вы получите свойство DataItem
как NULL.
Обходной путь может заключаться в том, чтобы всегда повторно связывать сетку с фактическими данными в каждой обратной передаче в начале жизненного цикла страницы (скажем, page_load
).
Однако, в вашем случае, вы очень хорошо можете использовать DataKeyNames
. Вопреки вашему убеждению, вам не нужно DataTable, чтобы это свойство работало. Например, если у вашего класса есть свойство с именем ItemId
, указывающее ключ для вашего объекта, вы можете использовать DataKeyNames="ItemId"
в разметке и ссылаться на него в OnRowDeleting
, используя Keys свойство аргументов события.