我有一个数据绑定组合框:
using(DataContext db = new DataContext())
{
var ds = db.Managers.Select(q=> new { q.ManagerName, q.ManagerID});
cmbbx_Managers.BindingContext = new BindingContext();
cmbbx_Managers.DataSource = ds;
cmbbx_Managers.DisplayMember = "ManagerName";
cmbbx_Managers.ValueMember = "ManagerID";
}
当表单加载时,没有选择任何项目,但是当用户选择项目时,无法取消选择该项目。我试图添加cmbbx_Managers.items.Insert(0, "none")
,但它没有解决问题,因为无法向数据绑定组合框添加新项目。
如何允许用户取消选择combobox
项?
答案 0 :(得分:4)
要将数据项添加到数据绑定组合框,您需要将项目添加到绑定到ComboBox的列表中。
var managers = managerRepository.GetAll();
managers.Insert(0, new Manager() { ManagerID = 0, ManagerName = "(None)");
managersComboBox.DisplayMember = "ManagerName";
managersComboBox.ValueMember = "ManagerID";
managersComboBox.DataSource = managers;
因此,要取消选择,您现在只需设置ComboBox.SelectedIndex = 0
,否则请使用BindingSource.CurrencyManager
。
此外,需要在@RamonAroujo从他的评论中提供给我们的这个精度的最后一行中设置DataSource属性。我相应地更新了我的答案。
答案 1 :(得分:3)
要取消选择一个项目,假设用户按下Esc键,您可以订阅comboxBox KeyDown事件并将所选索引设置为none。
private void cmbbx_Managers_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Escape && !this.cmbbx_Managers.DroppedDown)
{
this.cmbbx_Managers.SelectedIndex = -1;
}
}
答案 2 :(得分:1)
您在下拉ComboBox中“取消选择”某个项目的方法是选择不同的项目。
ComboBox没有“取消选择”选项 - 总是必须选择一些东西。如果要模拟未选择任何内容的行为,则需要向ComboBox添加<none>
项(或等效项)。然后,用户可以在“取消选择”时选择此选项。
默认情况下,一个ComboBox在没有选择任何项目的情况下出现是糟糕的设计,因为用户永远无法重新创建该状态。你永远不应该允许这种情况发生。在控件(或父窗体)的初始值设定项中,始终将ComboBox设置为默认值。
如果您 确实 需要一个允许清除当前选择的小部件,那么您应该使用ListView或ListBox控件。