Ho una vista datagrid che chiameremo dataGridViewExample.Datagridview che causa IndexOutOfRangeException quando si fa clic su
Il mio scopo (i tipi di dati non comuni è perché il mio database è SQLite):
class MyObject
{
public Int64 Vnr { get; set; }
public string Name { get; set; }
public Single Price { get; set; }
public int Amount { get; set; }
}
Ecco il codice rilevante:
//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();
}
Quando MyForm viene chiamato con un .ShowDialog, si presenta bene e visualizza il mio esempio DataGridView bene. Come puoi leggere dal codice, lo ExampleList
è inizialmente vuoto, quindi mostra solo una vista datagrid vuota con 4 colonne: Vnr, Nome, Prezzo & Quantità. Se clicco dentro di esso ecc. Non succede nulla, quindi tutto funziona come pianificato, finora.
Ogni volta che chiamo AddtoDataGridViewExample()
aggiunge il nuovo oggetto a Datagridview e la vista datagrid si aggiorna, elencando tutti gli oggetti aggiunti fino a quel momento (si mostrano come righe, sempre secondo il piano).
Ora, ricorda che ho appena detto che non è successo nulla se hai fatto clic all'interno di DataGridViewExample
prima che io abbia chiamato AddtoDataGridViewExample()
? Bene, dopo aver chiamato AddtoDataGridViewExample()
una o più volte, il programma si bloccherà se clicco all'interno di DataGridViewExample
(ad esempio: gli utenti vogliono selezionare una riga). Getta un IndexOutOfRangeException e parla di un indice -1. Genera anche l'eccezione nell'altro modulo, sulla riga dove chiamo MyForm con .ShowDialog()
;
Sono davvero bloccato su questo, avete qualche idea di cosa c'è che non va ?? Il mio unico indizio è che ritengo che l'aggiornamento dell'origine dati di DataGridViewExample
potrebbe essere la causa del problema. Altro importante nota: Ho ancora associato eventi al mio DataGridViewExample
. Quindi puoi escludere questa idea.
Ecco proprietà tutti DataGridViewExample
's:
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;
Dove è il codice che gestisce l'evento click? In genere questa eccezione si verifica perché si sta gestendo un evento click e quindi si tenta di ottenere la riga selezionata quando non è selezionata alcuna riga. Avere selezionato una riga e fare clic sulla griglia si escludono a vicenda. Quindi, dov'è il codice che gestisce l'evento click che genera l'eccezione? – Josh
Ho ancora aggiunto eventi a dataGridViewExample, ovvero la parte allarmante :(quindi semmai è un evento inbuild che lo sta causando – CasperT