Winforms Databinding Combobox恢复丢失的焦点

时间:2012-09-12 05:35:06

标签: c# winforms combobox

我有一个Employee对象,它有一个EmploymentStatusID(int)字段。

我有一个组合框,它从就业状态枚举中填充并绑定到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。无论我做什么,价值都会变回表格打开时的状态!有什么想法吗?

1 个答案:

答案 0 :(得分: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

我希望这会有所帮助:)