![](/img/trans.png)
[英]InvalidArgument=Value of '0' is not valid for 'SelectedIndex'
[英]InvalidArgument=Value of '0' is not valid for 'SelectedIndex'. Parameter name: SelectedIndex
嘗試此代碼時出現上述錯誤。 我試着 只給出我的代碼但沒有用。 (這是默認的)
錯誤出現在cmbProduct_SelectedIndexChanged
事件中。
cmbProduct --> combobox
cmbBrand --> combobox
全球的
DataSet dsUpdate = new DataSet();
表單加載
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*/
請幫忙
提前致謝。
問題是:
當您啟動應用程序時,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;
我有同樣的錯誤。 我認為這個錯誤有一些原因。 所以我的錯誤與“在另一個線程中設置DataSource
不起作用”有關
例子
//Run in another thread
myComboBox.DataSource = myDataSource; //not set
修復
myComboBox.Invoke(new Action(() => myComboBox.DataSource = myDataSource));
你也可以試試這個。 在設置組合框 DataSource 之前設置它的 BindingContext
cmbProduct.BindingContext = this.BindingContext;
如果您在沒有有效數據源的情況下嘗試設置 SelectedIndex,則會發生這種情況。 如果您將默認值重置為 0,並偶爾更改數據源列表,您可能會看到這一點。 如果應用新的數據源,則不需要默認為 0,因此簡單的檢查將避免它發生:
if (comboBox.Datasource != null) comboBox.SelectedIndex = 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;
}
}
}
在我的情況下,以下是我的問題
myComboBox.DataSource = myBindingSource
myBindingSource.DataSource = items.ToList() // error
以下工作
myComboBox.DataSource = null;
myBindingSource.DataSource = items.ToList();
MyComboBox.DataSource = myBindingSource;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.