将TextBox文本值绑定到ComboBox.SelectedItem,并将列表从ComboBox的选定项列表到另一个ComboBox

时间:2018-09-17 15:40:27

标签: c# winforms data-binding combobox textbox

所以我有一个“ Worker”类和一个绑定到ComboBox的BindingList。

    workers = new BindingList<Worker>();
    //// .. An "Add" button is somewhere there to add "Worker" objects to the list
    //ComboBox Workers List
    cbWorkersList.DataSource = workers;
    cbWorkersList.DisplayMember = "Name";

我想将TextBox中的“ Text”字段绑定到ComboBox中所选“ Worker”对象的“ Name”属性。

现在,我通过使用“ cbWorkersList_SelectedIndexChanged”事件处理程序来完成此操作,手动修改了txtWorkerName.Text属性:

private void cbWorkersList_SelectedIndexChanged(object sender, EventArgs e)
{
    if (cbWorkersList.SelectedItem != null)
    {
        txtWorkerName.Text = workers[workers.IndexOf((Worker)cbWorkersList.SelectedItem)].Name;
    }
}

我试图以这种方式绑定文本框:

InitializeComponent();
txtWorkerName.DataBindings.Add("Text", cbWorkersList, "Text");

但是,如果我单击列表中的其他项,这只会更新TextBox,如果使用箭头键更改选择,则TextBox文本字段不会更改。

是否有一种方法可以真正绑定它们,以便如果选择了ComboBox项,则文本字段将相应地更改?

在这个主题上,我还有另外2个ComboBox,并且我想将1绑定到其他ComboBox对象中的列表。 我想要的是一种具有以下逻辑的解决方案:

cbPositions.Items = ((<Shift>)cbShifts.SelcetedItem).PositionsList

何时 cbPositions是一个ComboBox,应使用“ Position”对象填充。 cbShifts是一个组合框,其中装有“ Shift”对象,其中每个“ Shift”都包含一个“位置”列表。

如何绑定它们,所以每次我从列表中选择另一个Shift时,Positions ComboBox都将填充Shift.PositionList中的Position对象?

而且,我想知道是否可以将ComboBox的“项”绑定到列表(在此示例中为我的工作人员列表),而不是通过代码,而是在设计器(“应用程序设置”或“数据绑定”)中?

0 个答案:

没有答案