根据值成员过滤组合框

时间:2009-10-06 15:48:31

标签: winforms data-binding combobox

我在应用启动时加载了两个列表。第一个从数据库加载一组完整的数据,第二个从文件中独立加载一组关联的数据 每个列表都加载到BindingSource中,并设置为各自组合框的DataSource。数据加载得很好。
问题是我需要让第二个comboBox只显示其列表中与第一个列表的选定值相对应的元素。 我试图将值成员设置为数据的引用位,但是无法弄清楚如何让comboBoxSettings仅显示其EventID与EventList组合框中所选项的EventID匹配的项。

         //Event List comboBox
        comboBoxEventList.DataSource = _eventSimPresenter.BindingSourceEventList;
        comboBoxEventList.DisplayMember = "DisplayName";
        comboBoxSettings.ValueMember = "EventID";

        //Settings combobox
        comboBoxSettings.DataSource = _eventSimPresenter.BindingSourceUserSettings;
        if (_eventSimPresenter.BindingSourceUserSettings.Count > 0)
        {
            comboBoxSettings.DisplayMember = "EventName";
            comboBoxSettings.ValueMember = "EventID";
        }

谢谢!

1 个答案:

答案 0 :(得分:2)

您可以在_ eventSimPresenter中创建一个按BindingSourceUserSettings返回eventId的方法。当第一个comboBox发生更改时,请选择所选的eventId并更新第二个comboBox数据源:

    ...
    comboBoxSettings.DataSource =
              _eventSimPresenter.GetBindingSourceUserSettings(selectedEventId)
    if (_eventSimPresenter.BindingSourceUserSettings.Count > 0)
    {
        comboBoxSettings.DisplayMember = "EventName";
        comboBoxSettings.ValueMember = "EventID";
    }

换句话说,过滤应该应用于数据源,因为无法通过comboBox进行过滤。