У меня есть winform, которая имеет gridview, с которой я применяю данные через набор данных. Когда данные связываются, он вызывает обработчик события SelectionChanged. Я исследовал это и нашел способ обойти его, добавив предложение if, чтобы узнать, имеет ли DGV фокус (все остальные разрешения не работают, что я нашел). Эта часть работает как и планировалось. Когда я просматриваю программу, обработчик события пытается пройти код 3 раза, когда он связывает данные. Предложение if не позволяет ему получить код. Моя проблема связана с привязкой данных, и затем я выбираю строку в DGV, тогда обработчик событий выдает «Необработанное исключение типа« System.ArgumentOutOfRangeException », произошедшее в mscorlib.dll». При переходе через код DGV возвращает правильный индекс строки в мою переменную «int row», но код, который я использую для получения информации о строках/ячейках, выдает ошибку до того, как она применит ее к переменной «loadtableID». Мне нужна помощь. Вы можете игнорировать второй DGV в верхней части. Он берет информацию о выбранной строке и получает другую информацию таблицы БД. Кроме того, если это помогает, я не применял источник данных к программе или не создавал наборы данных для каждого отдельного набора данных, который возвращен, я использую общий набор данных системы при возврате данных.ошибка при попытке чтения из DataGridView с обработчиком событий winform
private void gvMainSelectResults_SelectionChanged(object sender, EventArgs e)
{
if (gvMainSelectResults.Focused)
{
gvMainArchiveResults.DataSource = null; //second DGV that is populated later and everytime is cleared with a new selection
loadTableID = 0;
orgID = 0;
dbFileName = "";
sourceType = "";
int row = gvMainSelectResults.CurrentCell.RowIndex;
loadTableID = Convert.ToInt32(gvMainSelectResults.SelectedRows[row].Cells["LoadTableID"].Value); //this is where I get the error, even if the "int row" has the correct index number
orgID = Convert.ToInt32(gvMainSelectResults.SelectedRows[row].Cells["OrganizationID"].Value);
dbFileName = Convert.ToString(gvMainSelectResults.SelectedRows[row].Cells["FileName"].Value);
sourceType = Convert.ToString(gvMainSelectResults.SelectedRows[row].Cells["SourceType"].Value);
more code here...
Это DGV вы имеете в виду не то же самое один, то другой один. У меня есть 2 (gvMainSelectResults, который является заполненным, и gvMainArchiveResults, который использует информацию из первой, чтобы заполнить вторую, поэтому каждый раз, когда они выбирают новую строку, вторая DGV очищается и будет применять новый набор данных) , Вот почему gvMainArchiveResults был помещен наверху кода. – Terran28
обновленный код с замечаниями – Terran28
Я вижу, но я думаю, что нашел проблему сейчас. обновление ответа – Steve