InvalidArgument =值'0'对'SelectedIndex'无效.参数名称:SelectedIndex

Mr_*_*een 6 .net c# xml winforms

我在尝试此代码时遇到上述错误.我试过给我的代码,但没有用.(这是默认的)

这是我的XML文件

错误发生在cmbProduct_SelectedIndexChanged事件中.

        cmbProduct --> combobox
        cmbBrand   --> combobox
Run Code Online (Sandbox Code Playgroud)

全球

        DataSet dsUpdate = new DataSet();
Run Code Online (Sandbox Code Playgroud)

的Form_Load

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

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*/  
Run Code Online (Sandbox Code Playgroud)


提前谢谢.

Dan*_*vić 5

问题是:

当你启动应用程序时,cmbBrand中没有项目,但cmbProduct会触发SelectedIndexChanged.

试试这个:

从Form1.Designer.cs中删除SelectedIndexChanged事件初始化.尝试找到以下行:

this.cmbProduct.SelectedIndexChanged += new System.EventHandler(this.cmbProduct_SelectedIndexChanged);
Run Code Online (Sandbox Code Playgroud)

之后,当您使用xml文件中的数据填充DataSet时,初始化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;
Run Code Online (Sandbox Code Playgroud)