我有一个ComboBox
,它使用列表作为DataSource
。由于我最初希望选定的ComboBox
项为空,我在列表的开头添加一个空行,然后在第一个SelectedIndexChanged
出现后删除该行。
问题是,一旦添加,我可以设法再次移除空白项目。它似乎已从DataSource
中删除(使用Console.WriteLine(DataSourceList[0].ToString());
进行测试),但它仍然是ComboBox
中的一个选项。鸭子我做错了什么?
初始绑定
// 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;
}
}
答案 0 :(得分:0)
更改数据源后,您需要DataBind()
DropDownList。
答案 1 :(得分:0)
我终于找到了解决方案。它需要两个结构变化:
BindingList<T>
而不是List<T>
_DropDown
)因此,在创建列表时添加空白项目(.Insert()
也可以):
BindingList<String> ComboOpts = new BindingList<String>();
comboOpts.Add(String.Empty);
comboOpts.Add("Option 1");
comboOpts.Add("Option 2");
comboOpts.Add("Option 3");
然后在DropDown
事件中删除第一个项目(如果它为空)。重新绑定数据源甚至是不必要的(BindingList
负责):
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);
}