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项目?
“取消选择”下拉组合框中的某个项目的方法是选择另一个项目。
\n\nComboBox\xe2\x80\x94 没有“取消选择”选项,始终必须选择某些内容。如果要模拟未选择任何内容的行为,则需要<none>向组合框添加一个项目(或等效项目)。当用户想要“取消选择”时,可以选择该选项。
这是糟糕的设计,默认情况下,组合框出现时没有选择任何项目,因为用户永远无法重新创建该状态。你绝对不应该允许这种情况发生。在控件(或父窗体)的初始值设定项中,始终将 ComboBox 设置为默认值。
\n\n如果您确实需要一个允许清除当前选择的小部件,那么您应该使用 ListView 或 ListBox 控件。
\n要将项目添加到数据绑定组合框,您需要将项目添加到绑定到组合框的列表中。
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 属性。我相应地更新了我的答案。