首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“0”的InvalidArgument=Value对“SelectedIndex”无效。参数名称: SelectedIndex

“0”的InvalidArgument=Value对“SelectedIndex”无效。参数名称: SelectedIndex
EN

Stack Overflow用户
提问于 2012-10-11 12:23:10
回答 6查看 30.9K关注 0票数 6

当我尝试这段代码时,我会得到上面的错误。我试着给just my code,但没用。(这是默认的)

Here is my XML file

错误发生在cmbProduct_SelectedIndexChanged事件中。

代码语言:javascript
复制
        cmbProduct --> combobox
        cmbBrand   --> combobox

全球

代码语言:javascript
复制
        DataSet dsUpdate = new DataSet();

Form_load

代码语言:javascript
复制
        dsUpdate.ReadXml(@"...\..\stock.xml");
        cmbProduct.DataSource = dsUpdate.Tables[0]
            .DefaultView.ToTable(true, "productname");//.DefaultView;
        cmbProduct.DisplayMember = "productname";
        cmbProduct.SelectedIndex = 0;

cmbProduct_SelectedIndexChanged

代码语言:javascript
复制
        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*/  

请帮帮忙

提前谢谢。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-10-11 12:37:45

问题是:

启动应用程序时,cmbBrand中没有项,但cmbProduct会触发SelectedIndexChanged。

试试这个:

从SelectedIndexChanged中删除Form1.Designer.cs事件初始化。试着找出以下几行:

代码语言:javascript
复制
this.cmbProduct.SelectedIndexChanged += new System.EventHandler(this.cmbProduct_SelectedIndexChanged);

之后,当您用来自xml文件的数据填充DataSet时,初始化SelectedIndexChanged事件:

代码语言:javascript
复制
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;
票数 6
EN

Stack Overflow用户

发布于 2018-02-23 08:26:43

我也犯了同样的错误。我认为这个错误有一些原因。因此,我的错误与“在另一个线程中设置DataSource不工作”有关。

示例

代码语言:javascript
复制
//Run in another thread
myComboBox.DataSource = myDataSource; //not set

修正用

代码语言:javascript
复制
myComboBox.Invoke(new Action(() => myComboBox.DataSource = myDataSource));
票数 2
EN

Stack Overflow用户

发布于 2016-03-17 06:51:17

你也可以试试这个。在设置组合框之前,DataSource设置它的BindingContext

代码语言:javascript
复制
cmbProduct.BindingContext = this.BindingContext;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12839444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档