C# 基于用户选择动态更新组合框

C# 基于用户选择动态更新组合框,c#,winforms,combobox,C#,Winforms,Combobox,我不确定回发在WinForms上是如何工作的,但我希望允许组合框根据用户选择进行更新 当前,当我更改第一个组合框的选择时,它不会更改第二个下拉列表中的项目。(默认情况下仅显示第一项) 你能以什么方式改变这一点 我所拥有的代码: public ContentUploader() { InitializeComponent(); using (SqlConnection con = new SqlConnection(conString)) { con.Ope

我不确定回发在WinForms上是如何工作的,但我希望允许组合框根据用户选择进行更新

当前,当我更改第一个
组合框的选择时,它不会更改第二个下拉列表中的项目。(默认情况下仅显示第一项)

你能以什么方式改变这一点

我所拥有的代码:

public ContentUploader()
{
    InitializeComponent();
    using (SqlConnection con = new SqlConnection(conString))
    {
        con.Open();
        using (SqlDataAdapter sda = new SqlDataAdapter("SELECT ... re.OverallID = 1", conString))
        {
            DataTable dt = new DataTable();
            sda.Fill(dt);
            sections_drp.ValueMember = "ID";
            sections_drp.DisplayMember = "DisplayName";
            sections_drp.DataSource = dt;
        }
    }
    sections_drp.SelectedIndexChanged += (o, e) => FillFirstChildren();
}
public void FillFirstChildren()
{
    firstChild_drp.Items.Add("Select Item");
    firstChild_drp.SelectedIndex = 0;
    string sectionId = sections_drp.SelectedValue.ToString();
    using (SqlConnection con = new SqlConnection(conString))
    {
        con.Open();
        using (SqlDataAdapter sda = new SqlDataAdapter("SELECT ... em.ItemID = ("+ sectionId +")", conString))
        {
            DataTable dt = new DataTable();
            sda.Fill(dt);
            firstChild_drp.ValueMember = "ID";
            firstChild_drp.DisplayMember = "DisplayName";
            firstChild_drp.DataSource = dt;
        }
    }
    FillSecondChildren();
}

Winforms
不包含回发。您需要连接到
SelectedIndexChanged
(或
)事件以过滤第二个下拉列表

例如:

    public void FillFirstChildren()
    {
        //Your Fill Logic Here
        ...

        //Call FillSecondChildren on selection change
        firstChild_drop.SelectedIndexChanged += (o, e) => FillSecondChildren();
    }

使用第一个组合的选定索引更改事件填充second@kostasch. 如果我有多个组合,我会在前一个选择的索引更改事件中填充每个组合。你只需回答你的问题:)@Masriyah确切地说,每个组合框都会有一个不同的更改事件句柄,每个组合框的句柄
SelectedIndexChanged
,我是否放置
firstChild\u drop.SelectedIndexChanged+=(o,e)=>FillSecondChildren()
语句在
内进行编码,然后在该方法的最后使用
firstChild\u drp.DataSource=dt