我在尝试此代码时遇到上述错误。我尝试过just my code但没有用。 (这是默认的)
错误发生在cmbProduct_SelectedIndexChanged
事件中。
cmbProduct --> combobox
cmbBrand --> combobox
全球
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*/
请帮忙
提前致谢。
答案 0 :(得分:5)
问题是:
启动应用程序时,cmbBrand中没有项目,但cmbProduct会触发SelectedIndexChanged。
试试这个:
从Form1.Designer.cs中删除SelectedIndexChanged事件初始化。尝试找到以下行:
this.cmbProduct.SelectedIndexChanged += new System.EventHandler(this.cmbProduct_SelectedIndexChanged);
之后,当您使用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;
答案 1 :(得分:1)
您也可以试试这个。在设置组合框之前,DataSource设置其BindingContext
cmbProduct.BindingContext = this.BindingContext;
答案 2 :(得分:0)
DataSource
不起作用"
例如
//Run in another thread
myComboBox.DataSource = myDataSource; //not set
修复
myComboBox.Invoke(new Action(() => myComboBox.DataSource = myDataSource));
答案 3 :(得分:0)
如果您遇到此问题:
下面是一些代码来说明这一点:
private readonly List<ComboBox> combosToSetIndexOn = new List<ComboBox>();
private bool firstActivation = true;
private Control firstWindowsControl = null;
...
// Other code sets firstWindowsControl...
private void DynamicForm_Activated(object sender, EventArgs e)
{
if (firstActivation)
{
firstActivation = false;
bool fwcPresent = (firstWindowsControl != null);
Console.WriteLine($"DynamicForm_Activated: firstWindowControl present: {fwcPresent}");
if (fwcPresent)
{
firstWindowsControl.Focus();
}
if (combosToSetIndexOn.Count > 0)
{
foreach (ComboBox c in combosToSetIndexOn)
{
Console.WriteLine($"DynamicForm_Activated: processing: {c.Name}");
c.SelectedIndex = 0;
}
}
}
答案 4 :(得分:0)
如果在没有有效数据源的情况下尝试设置SelectedIndex,则会发生这种情况。如果将默认值重置为0,并偶尔更改数据源列表,则可能会看到此信息。如果应用新的数据源,则无需默认为0,因此简单的检查将避免发生这种情况:
如果(comboBox.Datasource!= null)comboBox.SelectedIndex = 0;