C# 在ComboBox数据源中具有初始空白项
我有一个C# 在ComboBox数据源中具有初始空白项,c#,winforms,data-binding,combobox,C#,Winforms,Data Binding,Combobox,我有一个组合框,它使用列表作为数据源。由于我最初希望所选的组合框项为空,因此我在列表的开头添加了一个空行,一旦出现第一个SelectedIndexChanged,我就想删除它 问题是,一旦添加,我可以再次删除空白项目。它似乎已从数据源中删除(使用Console.WriteLine(DataSourceList[0].ToString());),但它仍然是组合框中的一个选项。我到底做错了什么 初始绑定 // Set the data source + 1 blank spot cboDropDow
组合框
,它使用列表作为数据源
。由于我最初希望所选的组合框
项为空,因此我在列表的开头添加了一个空行,一旦出现第一个SelectedIndexChanged
,我就想删除它
问题是,一旦添加,我可以再次删除空白项目。它似乎已从数据源中删除(使用Console.WriteLine(DataSourceList[0].ToString());
),但它仍然是组合框中的一个选项。我到底做错了什么
初始绑定
// Set the data source + 1 blank spot
cboDropDown.DataSource = viewModel.dataList;
viewModel.dataList.Insert(0, String.Empty);
// Bind the selected value
Binding bindSelItem = new Binding("SelectedItem", viewModel, "selectedItem");
cboDropDown.DataBindings.Add(bindSelItem);
所选索引已更改
private void cboDropDown_SelectedIndexChanged(object sender, EventArgs e)
{
// Write the first element to the console (debug purpose)
Console.WriteLine("First element is: " + viewModel.dataList[0].ToString());
// If the first element is blank, remove and reset datasource
if (viewModel.dataList[0].ToString() == String.Empty)
{
// Remove item at index 0
viewModel.dataList.RemoveAt(0);
// Write to console to confirm that it is removed
Console.WriteLine("First element is: " + viewModel.dataList[0].ToString());
// Reset data source for ComboBox
cboDropDown.DataSource = viewModel.dataList;
}
}
更改数据源后,您需要DataBind()
您的DropDownList。我终于想出了一个解决方案。它需要两个结构变化:
使用BindingList
而不是List
使用绑定过程中未调用的事件(我使用了\u下拉列表
)
因此,在创建列表时,添加一个空白项(.Insert()
也可以):
Winforms combobox没有数据绑定问题似乎与绑定过程本身调用SelectedIndexChanged
有关。当用户更改为ComboBox时,我希望第一次调用它。
BindingList<String> ComboOpts = new BindingList<String>();
comboOpts.Add(String.Empty);
comboOpts.Add("Option 1");
comboOpts.Add("Option 2");
comboOpts.Add("Option 3");
private void cboMyComboBox_DropDown(object sender, EventArgs e)
{
// The first time that the combo box is activated, remove the initial item
if (viewModel.ComboOptions[0].ToString() == String.Empty)
viewModel.ComboOptions.RemoveAt(0);
}