【问题标题】:Databound ComboBox returns its previous selected item when loosing focus失去焦点时,Databound ComboBox 返回其上一个选定项
【发布时间】:2012-10-30 17:20:23
【问题描述】:

我在 WinForm 上有一个普通的 ComboBox。我想用城市填充它并将其数据绑定设置为我的业务对象 CityID。对象是 Office {ID, Name, CityID} 我填充这样的项目

public void LoadCityCombo(List<City> list)
{
    CityComboBox.DisplayMember = "Name";
    CityComboBox.ValueMember = "ID";
    CityComboBox.DataSource = list;
}       

比加载对象

public void LoadOffice(Office office)
{
    NameTextBox.DataBindings.Add("Text", office, "Name");
    AddressTextBox.DataBindings.Add("Text", office, "Address");
    Binding b = new Binding("SelectedValue", office, "CityID");
    CityComboBox.DataBindings.Add(b);
}  

当我打开表单时选择了正确的城市,但是当我从组合中选择另一个城市并移动到其他控件(松散的组合焦点)时,旧的选定城市会在组合中返回。

我在搞砸什么?

【问题讨论】:

  • 如果不查看您的代码中的其他事件处理程序可能会被触发并“搞砸”事情,这很难说。
  • 嗨,没有任何其他事件处理程序。它是添加到表单中的全新 ComboBox。你能发布一些确实适合你的代码吗?

标签: data-binding combobox


【解决方案1】:

问题出在这一行:

Binding b = new Binding("SelectedValue", office, "CityID");
CityComboBox.DataBindings.Add(b);

解决办法是

Binding b = new Binding("SelectedValue", office, "CityID", true);
CityComboBox.DataBindings.Add(b);

Binding b = new Binding("SelectedValue", office, "CityID");
b.FormatingEnabled = true;
CityComboBox.DataBindings.Add(b);

我不明白这是否是由于我的本地化造成的,但在另一台计算机上,绑定在没有设置此属性的情况下工作。 奇怪的是,如果不设置此属性,您不会触发 BindingCompleted 事件,您可以在其中查看是否存在绑定错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-30
    相关资源
    最近更新 更多