取消选择组合框项目

时间:2014-08-15 14:56:36

标签: c# .net winforms combobox datasource

我有一个数据绑定组合框:

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项?

3 个答案:

答案 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控件。