Ich habe eine Datagridview, die wir DataGridViewExample nennen werden.Datagridview verursacht IndexOutOfRangeException beim Klicken auf
Mein Objekt (die ungewöhnlich Datentypen ist, weil meine Datenbank SQLite ist):
class MyObject
{
public Int64 Vnr { get; set; }
public string Name { get; set; }
public Single Price { get; set; }
public int Amount { get; set; }
}
Hier ist der relevante Code:
//This form gets called with a .ShowDialog(); in my form1.
private List<MyObjecte> ExampleList = new List<MyObject>();
public MyForm()
{
dataGridViewExample.DataSource = OrdreInkøbsListe;
}
private void AddtoDataGridViewExample()
{
//Add a new MyObject to the list
ExampleList.Add(new myObject()
{
Vnr = newVnr,
Amount = newAmount,
Price = newPrice,
Name = newName
});
//refresh datasource
dataGridViewExample.DataSource = null;
dataGridViewExample.Refresh();
dataGridViewExample.DataSource = OrdreInkøbsListe;
ddataGridViewExample.Refresh();
}
Wenn MyForm mit einem .ShowDialog aufgerufen wird, zeigt sich, gut und zeigt mein DataGridView Beispiel gut an. Wie Sie aus dem Code lesen können, ist das ExampleList
zunächst leer, so dass es nur eine leere Datagridview mit 4 Spalten zeigt: Vnr, Name, Preis & Betrag. Wenn ich drinnen reinklicke usw. passiert nichts - so funktioniert alles wie geplant, so weit.
Jedes Mal, wenn ich AddtoDataGridViewExample()
rufe, fügt das neue Objekt dem Datagridview hinzu, und das datagridview wird aktualisiert, wobei alle bisher hinzugefügten Objekte aufgelistet werden (sie zeigen sich als Zeilen, wieder wie geplant).
Denken Sie daran, dass ich gerade gesagt habe, dass nichts passiert ist, wenn Sie innerhalb DataGridViewExample
geklickt haben, bevor ich AddtoDataGridViewExample()
aufgerufen habe? Nun, nachdem ich einmal oder mehr AddtoDataGridViewExample()
aufgerufen habe, stürzt das Programm ab, wenn ich in DataGridViewExample
klicke (zum Beispiel: der Benutzer möchte eine Zeile auswählen). Es wirft eine IndexOutOfRangeException und spricht über einen Index -1. Es wirft auch die Ausnahme in der anderen Form, in der Zeile, wo ich MyForm mit .ShowDialog()
aufrufen;
Ich bin wirklich auf diesem stecken, haben Sie eine Ahnung, was los ist ?? Mein einziger Hinweis ist, dass ich glaube, dass die Aktualisierung der Datenquelle DataGridViewExample
die Ursache des Problems sein könnte. Andere wichtig Hinweis: Ich habe noch keine Ereignisse an meine DataGridViewExample
gebunden. So können Sie diese Idee regeln.
Hier werden alle Eigenschaften s‘DataGridViewExample
:
this.dataGridViewExample.AllowUserToAddRows = false;
this.dataGridViewExample.AllowUserToDeleteRows = false;
this.dataGridViewExample.AllowUserToResizeColumns = false;
this.dataGridViewExample.AllowUserToResizeRows = false;
this.dataGridViewExample.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill;
this.dataGridViewExample.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.dataGridViewExample.Location = new System.Drawing.Point(591, 53);
this.dataGridViewExample.MultiSelect = false;
this.dataGridViewExample.Name = "dataGridViewExample";
this.dataGridViewExample.ReadOnly = true;
this.dataGridViewExample.RowHeadersVisible = false;
this.dataGridViewExample.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
this.dataGridViewExample.ShowEditingIcon = false;
this.dataGridViewExample.Size = new System.Drawing.Size(240, 150);
this.dataGridViewExample.TabIndex = 31;
Wo ist der Code, der das Click-Ereignis behandelt? In der Regel tritt diese Ausnahme auf, weil Sie ein click -Ereignis verarbeiten und dann versuchen, die ausgewählte Zeile abzurufen, wenn keine Zeile ausgewählt ist. Das Auswählen einer Zeile und das Klicken auf das Raster schließen sich gegenseitig aus. Also, wo ist der Code, der das Click-Ereignis behandelt, das die Ausnahme auslöst? – Josh
Ich habe noch irgendwelche Ereignisse zu DataGridViewExample hinzugefügt, das ist der alarmierende Teil :(Also, wenn überhaupt, ist es ein inbuildt Ereignis, das es verursacht. – CasperT