基于另一个组合框值的组合框内容

本文关键字:组合 另一个 | 更新日期: 2023-09-27 18:12:03

我有两个组合框,其中第一个有类别(我可以很容易地从源文件填充它)。诀窍是让第二个组合框只显示与第一个组合框中选择的类别相关联的项。例如:

cb1是从源文件中填充的,类别值为1,2,3 &4和cb2用值A、B、C、D、E、F、G、H

填充

我做不到的是限制在cb2中看到的东西。因此,当cb1的值为"1"时,我只希望"A"answers"B"在cb2中可见,如果cb1变为"2",我只希望"C"answers"D"可见。

基于另一个组合框值的组合框内容

winforms:

如果你有一个表单2组合框(cb1, cb2),你可以使用这样的东西吗?(显然修改以支持您的数据对象)。

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            //create a list for data items
            List<MyComboBoxItem> cb1Items = new List<MyComboBoxItem>();
            //assign sub items
            cb1Items.Add(new MyComboBoxItem("1")
            {
                SubItems = { new MyComboBoxItem("A"), new MyComboBoxItem("B") }
            });
            cb1Items.Add(new MyComboBoxItem("2")
            {
                SubItems = { new MyComboBoxItem("C"), new MyComboBoxItem("D") }
            });
            cb1Items.Add(new MyComboBoxItem("3")
            {
                SubItems = { new MyComboBoxItem("E"), new MyComboBoxItem("F") }
            });
            cb1Items.Add(new MyComboBoxItem("4")
            {
                SubItems = { new MyComboBoxItem("G"), new MyComboBoxItem("H") }
            });
            //load data items into combobox 1
            cb1.Items.AddRange(cb1Items.ToArray());
        }
        private void cb1_SelectedIndexChanged(object sender, EventArgs e)
        {
            //get the combobox item
            MyComboBoxItem item = (sender as ComboBox).SelectedItem as MyComboBoxItem;
            //make sure no shinanigans are going on
            if (item == null)
                return;
            //clear out combobox 2
            cb2.Items.Clear();
            //add sub items
            cb2.Items.AddRange(item.SubItems.ToArray());
        }
    }
    public class MyComboBoxItem
    {
        public string Name;
        public List<MyComboBoxItem> SubItems = new List<MyComboBoxItem>();
        public MyComboBoxItem(string name)
        {
            this.Name = name;
        }
        public override string ToString()
        {
            return Name;
        }
    }