Ich habe eine Winform, die eine Gridview hat, dass ich Daten über ein Dataset anwenden. Wenn die Daten gebunden sind, ruft sie den SelectionChanged-Ereignishandler auf. Ich habe das recherchiert und einen Weg gefunden, indem ich eine if-Klausel hinzufügte, um zu sehen, ob der DGV den Fokus hat (alle anderen Auflösungen funktionierten nicht, die ich fand). Dieser Teil funktioniert wie geplant. Wenn ich das Programm durchtrete, versucht der Event-Handler, den Code drei Mal zu durchlaufen, wenn er die Daten bindet. Die if-Klausel verhindert, dass der Code erreicht wird. Mein Problem ist, nachdem die Daten bindet und ich wähle dann eine Zeile in der DGV, der Event-Handler wirft dann "Eine nicht behandelte Ausnahme vom Typ 'System.ArgumentOutOfRangeException' aufgetreten in mscorlib.dll". Beim Durchlaufen des Codes gibt DGV den richtigen Zeilenindex an meine Variable 'int row' zurück, aber der Code, mit dem ich die Zeilen-/Zelleninformationen abrufe, löst den Fehler aus, bevor er auf die Variable 'loadtableID' angewendet wird. Ich brauche Hilfe. Sie können den zweiten DGV oben ignorieren. Er nimmt die Informationen der ausgewählten Zeile und ruft eine andere DB-Tabelleninformation ab. Wenn es hilft, habe ich keine Datenquelle auf das Programm angewendet oder Datensätze für jedes einzelne Dataset erstellt, das zurückgegeben wird. Ich verwende das generische Dataset des Systems, wenn Daten zurückgegeben werden.Fehler beim Versuch, von DataGridView mit Ereignishandler Winform zu lesen
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...
Das DGV Sie sich beziehen ist nicht das gleiche, es ist eine andere Stelle verweisen sollte. Ich habe 2 (gvMainSelectResults, das ist das, das gefüllt wird, und gvMainArchiveResults, das die Informationen aus dem ersten verwendet, um das zweite zu füllen, also löscht sich das 2. DGV jedes Mal, wenn sie eine neue Zeile auswählten, und wendet das neue Dataset an) . Aus diesem Grund wurde gvMainArchiveResults am Anfang des Codes platziert. – Terran28
aktualisierter Code mit Bemerkungen – Terran28
Ich sehe, aber ich denke, ich habe das Problem jetzt gefunden. Aktualisierung der Antwort – Steve