2012-10-11 558 views
5

Recibo el error anterior cuando intento este código. Intenté dar just my code pero no uso. (Fue por defecto)
InvalidArgument = El valor de '0' no es válido para 'SelectedIndex'. Nombre del parámetro: SelectedIndex

Here is my XML file

El error es en cmbProduct_SelectedIndexChanged evento.

 cmbProduct --> combobox 
     cmbBrand --> combobox 

Global

 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*/ 

Por favor ayuda
Gracias de antemano.

+0

¿El cmbBrand definitivamente tienen entradas soem en ella? ¿También puede confirmar qué tipo de objeto es cmbBrand? – Chris

+0

Sí, tiene entradas. cuando no doy 'cmbBrand.SelectedIndex = 0;' en 'cmbProduct_SelectedIndexChanged' muestra las entradas. pero para que no muestre valor nulo al principio, agregué 'cmbBrand.SelectedIndex = 0;'. y está dando error. –

Respuesta

5

El problema es:

cuando se inicia la aplicación, usted no tiene artículos en cmbBrand, pero cmbProduct dispara SelectedIndexChanged.

Prueba esto:

quitar SelectedIndexChanged inicialización evento desde Form1.Designer.cs. Tratar de encontrar la línea siguiente:

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

Después de eso, al rellenar conjunto de datos con los datos de archivo XML, inicializar 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

¡Intenté con usted xml, y trabajo! –

+0

cuando cierro sobre 'cmbBrand.SelectedIndex = 0;' dice que contiene '-1' pero como puede ver en mi archivo xml, tiene valores y también cuando ejecuto sin dar' cmbBrand.SelectedIndex = 0 ; ', mi forma muestra valores en cmbBrand, luego por supuesto no tiene' -1'. Esto lo que no puedo entender. –

+0

Pruebe la respuesta editada –

1

También puede probar esto. Antes de configurar el combobox DataSource establecer su BindingContext

cmbProduct.BindingContext = this.BindingContext; 
0

tuve el mismo error. Creo que este error tiene algunas razones. así que mi error está relacionado con "set DataSource en otro hilo que no está funcionando"

ejemplo

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

solución con

myComboBox.Invoke(new Action(() => myComboBox.DataSource = myDataSource)); 
Cuestiones relacionadas