取消选择组合框项目

kor*_*inp 3 .net c# combobox datasource winforms

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

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";
}
Run Code Online (Sandbox Code Playgroud)

当表单加载时,没有任何一个项目被选择,但是当用户选择一个项目时,它不能被取消选择。我尝试添加cmbbx_Managers.items.Insert(0, "none"),但它不能解决问题,因为不可能将新项目添加到数据绑定组合框中。

如何允许用户取消选择combobox项目?

Cod*_*ray 6

“取消选择”下拉组合框中的某个项目的方法是选择另一个项目

\n\n

ComboBox\xe2\x80\x94 没有“取消选择”选项,始终必须选择某些内容。如果要模拟未选择任何内容的行为,则需要<none>向组合框添加一个项目(或等效项目)。当用户想要“取消选择”时,可以选择该选项。

\n\n

这是糟糕的设计,默认情况下,组合框出现时没有选择任何项目,因为用户永远无法重新创建该状态。你绝对不应该允许这种情况发生。在控件(或父窗体)的初始值设定项中,始终将 ComboBox 设置为默认值。

\n\n

如果您确实需要一个允许清除当前选择的小部件,那么您应该使用 ListView 或 ListBox 控件。

\n


Wil*_*ler 5

要将项目添加到数据绑定组合框,您需要将项目添加到绑定到组合框的列表中。

var managers = managerRepository.GetAll();

managers.Insert(0, new Manager() { ManagerID = 0, ManagerName = "(None)");

managersComboBox.DisplayMember = "ManagerName";
managersComboBox.ValueMember = "ManagerID";
managersComboBox.DataSource = managers;
Run Code Online (Sandbox Code Playgroud)

因此,要取消选择,您现在只需设置ComboBox.SelectedIndex = 0,或者使用BindingSource.CurrencyManager.

另外,需要根据 @RamonAroujo 从他的评论中向我们提供的这一精度,在最后一行设置 DataSource 属性。我相应地更新了我的答案。