Я только что попробовал это в примере приложения datagridview, и оно прекрасно работает, поэтому должно быть что-то происходящее, о чем вы нам не рассказали.
Первое, что нужно сделать, это сломать один большойоператор в отдельные меньшие операторы, чтобы вы могли точно видеть, где происходит сбой.
Вы можете переписать приведенный выше код примерно так для целей отладки:
var cellindex = dgUnprocessedCards.SelectedCells[0].RowIndex;
var cellcollection = dgUnprocessedCards.Rows[cellindex].Cells[0];
int orderId = (int)dgUnprocessedCards.Value;
Кроме того, вы должны бытьв состоянии сделать следующее, чтобы достичь того, что вы хотите:
int orderId = (int)dataGridView1.SelectedRows[0].Cells[0].Value;
Это использует коллекцию SelectedRows, которая является немного более краткой, и я бы сказал, более обычный способ доступа к выбранным элементам из представления данных.
Наконец, вы, вероятно, захотите выполнить проверку вашего приведения значения, поскольку значение может не обязательно быть int.Что-то вроде:
int orderid;
if (!int.TryParse(cellcollection.Value.ToString(), out orderid))
{
// Some logic to deal with the fact that Value was not an int
}
Когда вызывается событие SelectionChanged?
Теперь - как вы упомянули, событие выбора, измененное вами, запускается при загрузке данных всетка.Похоже, что это не вызывает проблемы в моей тестовой версии, но может быть частью вашей проблемы.
Почему это происходит, должно быть связано не с типом источника данных, который вы используете, а с тем, когда вы присоединяетеВыбор изменен обработчик событий.Это связано с тем, что привязка данных вызывает событие изменения выбора.
Если вы добавите обработчик событий для события DataBindingComplete и добавите туда обработчики событий SelectionChanged или RowEnter, вы не должны видеть обработчик, вызванный во время привязки данных.
void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
this.dataGridView1.RowEnter += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView1_RowEnter);
this.dataGridView1.SelectionChanged += new System.EventHandler(this.dataGridView1_SelectionChanged);
}
Обратите внимание, что вам нужно удалить сгенерированное дизайнером вложение события и ссылаться на сгенерированные дизайнером методы, чтобы это работало.