2012-09-12 68 views
0

我有一个EmployeeStatusID(int)字段的Employee对象。Winforms Databinding Combobox恢复lostfocus

我有一个从就业状况枚举填充并绑定到字段在Form_Load组合框:

List<LookupListItem> EmpStatuses = new List<LookupListItem>(); 
foreach (EmploymentStatuses m in Enum.GetValues(typeof(EmploymentStatuses))) 
{ 
    EmpStatuses.Add(new LookupListItem((int)m, m.ToString())); 
} 
cboStatus.DataSource = EmpStatuses; // Enum.GetValues(typeof(CommonLibrary.Lookups.EmploymentStatuses)); 
cboStatus.ValueMember = "ItemValue"; 
cboStatus.DisplayMember = "ItemDesc"; 
cboStatus.DataBindings.Add("SelectedValue", _presenter.SelectedOfficer, "EmploymentStatusID"); 

当形式出现的正确值显示在组合框中,但如果用户改变数值,当组合框失去焦点时它会被放回!

相同形式的文本框和简单的组合框(即与一个字符串集合的组合框)都很好。

您可以看到,我最初尝试在枚举上使用GetValues,但我将其更改为列表以查看是否有帮助。我试过使用BindingList,我试过在绑定上使用DataSourceUpdateMode.OnValidation。我甚至尝试在selectedindexchanged事件上使用cboStatus.DataBindings [0] .WriteValue。无论我做什么,价值都会改回到当表单打开的时候!有任何想法吗?

+0

我知道这是旧的,但我有一个类似的问题我自己。你有没有幸运的解决这个问题,同时保持绑定? –

+0

对不起,我结束了愚蠢的绑定和编码自己:( – SteveCav

回答

0

我修改代码

 List<LookupListItem> EmpStatuses = new List<LookupListItem>(); 
     foreach (EmploymentStatuses m in Enum.GetValues(typeof(EmploymentStatuses))) 
     { 
      EmpStatuses.Add(new LookupListItem((int)m, m.ToString())); 
     } 

EmpStatuses.Add(new LookupListItem(<selectedValue>, "SomeText")); //<- my modified code 

     cboStatus.DataSource = EmpStatuses; // Enum.GetValues(typeof(CommonLibrary.Lookups.EmploymentStatuses)); 
     cboStatus.ValueMember = "ItemValue"; 
     cboStatus.DisplayMember = "ItemDesc"; 
     // Remove this part cboStatus.DataBindings.Add("SelectedValue", _presenter.SelectedOfficer, "EmploymentStatusID"); 

cboStatus.SelectedValue = <selectedValue> //<- my modified code 

我希望这将有助于:)

+0

我知道很热解决这个问题没有绑定,但我有很多这样的控制,并希望做到这一点,而无需手动编码的负载和保存。 – SteveCav