2012-10-11 8 views
5

Viene visualizzato l'errore sopra riportato quando sto provando questo codice. Ho provato a dare just my code ma non serve. (E 'stato di default)
InvalidArgument = Il valore di '0' non è valido per 'SelectedIndex'. Nome parametro: SelectedIndex

Here is my XML file

L'errore è in cmbProduct_SelectedIndexChanged evento.

 cmbProduct --> combobox 
     cmbBrand --> combobox 

globale

 DataSet dsUpdate = new DataSet(); 

Form_load

 dsUpdate.ReadXml(@"...\..\stock.xml"); 
     cmbProduct.DataSource = dsUpdate.Tables[0] 
      .DefaultView.ToTable(true, "productname");//.DefaultView; 
     cmbProduct.DisplayMember = "productname"; 
     cmbProduct.SelectedIndex = 0; 

cmbProduct_SelectedIndexChanged

 cmbBrand.Items.Clear(); 
     foreach (DataRow Row in dsUpdate.Tables[0].Select("productname='" + cmbProduct.Text + "'")) 
     { 
      //cmbBrand.SelectedIndex = i; 
      cmbBrand.Items.Add(Row["brandname"].ToString()); 
      //i++; 
     } 
     cmbBrand.SelectedIndex = 0; /*ERROR*/ 

Si prega di aiutare
Grazie in anticipo.

+0

fa cmbBrand sicuramente voci soem in esso? Puoi anche confermare quale tipo di oggetto è cmbBrand? – Chris

+0

Sì, ha delle voci. quando non sto dando 'cmbBrand.SelectedIndex = 0;' in 'cmbProduct_SelectedIndexChanged' mostra le voci. ma per fare in modo che non mostri il valore nullo all'inizio, ho aggiunto 'cmbBrand.SelectedIndex = 0;'. e sta dando errore –

risposta

5

Il problema è:

quando si avvia l'applicazione, non si dispone di elementi in cmbBrand, ma cmbProduct spara SelectedIndexChanged.

Prova questo:

rimuovere SelectedIndexChanged inizializzazione evento da Form1.Designer.cs. Prova a trovare seguente riga:

this.cmbProduct.SelectedIndexChanged += new System.EventHandler(this.cmbProduct_SelectedIndexChanged); 

Dopo di che, quando si popola DataSet con i dati da file XML, inizializzare evento SelectedIndexChanged:

dsUpdate.ReadXml(@"...\..\stock.xml"); 
cmbProduct.DataSource = dsUpdate.Tables[0].DefaultView.ToTable(true, "productname");//.DefaultView; 
cmbProduct.DisplayMember = "productname"; 
this.cmbProduct.SelectedIndexChanged += new System.EventHandler(this.cmbProduct_SelectedIndexChanged); 
cmbProduct.SelectedIndex = 0; 
+0

Ho provato con te xml e lavoro! –

+0

quando passo il mouse su 'cmbBrand.SelectedIndex = 0;' sta dicendo che contiene '-1' ma come puoi vedere nel mio file xml, ha dei valori e anche quando corro senza dare' cmbBrand.SelectedIndex = 0 ; ', il mio modulo mostra i valori in cmbBrand, quindi naturalmente non contiene' -1'. Questo quello che non riesco a capire. –

+0

Prova la risposta modificata –

1

Si può anche provare questo. Prima di impostare combobox DataSource imposta il suo BindingContext

cmbProduct.BindingContext = this.BindingContext; 
0

ho avuto lo stesso errore. Penso che questo errore abbia alcune ragioni. quindi il mio errore è di "set DataSource in un altro thread non funziona"

esempio

//Run in another thread 
myComboBox.DataSource = myDataSource; //not set 

correzione con

myComboBox.Invoke(new Action(() => myComboBox.DataSource = myDataSource)); 
Problemi correlati