Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

InvalidArgument=Value of '0' is not valid for 'SelectedIndex'. Parameter name: SelectedIndex

I am getting the above error when i am trying this code. I tried giving just my code but no use. (It was default)

Here is my XML file

The error is in cmbProduct_SelectedIndexChanged event.

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

Please help
Thanks in Advance.

like image 301
Mr_Green Avatar asked Oct 11 '12 12:10

Mr_Green


3 Answers

Problem is:

when you start application, you do not have items in cmbBrand, but cmbProduct fires SelectedIndexChanged.

Try this:

remove SelectedIndexChanged event initialization from Form1.Designer.cs. Try to find following line:

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

After that, when you populate DataSet with data from xml file, initialize SelectedIndexChanged event:

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;
like image 191
Danilo Vulović Avatar answered Nov 14 '22 18:11

Danilo Vulović


i had same error. i think this error have a some reasons. so my error is related to "set DataSource in another thread is not working"

example

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

fix with

myComboBox.Invoke(new Action(() => myComboBox.DataSource = myDataSource));
like image 21
Think Big Avatar answered Nov 14 '22 17:11

Think Big


You can also try this. Before setting combobox DataSource set its BindingContext

cmbProduct.BindingContext = this.BindingContext;
like image 1
Rashad Valliyengal Avatar answered Nov 14 '22 18:11

Rashad Valliyengal