首页 > 解决方案 > 将 TextBox 文本值绑定到 ComboBox.SelectedItem,并从 ComboBox 的选定项目列表到另一个 ComboBox

问题描述

所以我有一个“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;
    }
}

我试图以这种方式绑定 TextBox:

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

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

有没有办法真正绑定它们,以便如果选择了 ComboBox 项目,文本字段将相应更改?

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

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

当 cbPositions 是一个 ComboBox 时,应该填充“Position”对象。cbShifts 是一个 ComboBox,其中填充有“Shift”对象,其中每个“Shift”包含一个位置列表。

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

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

标签: c#winformsdata-bindingcomboboxtextbox

解决方案


推荐阅读