C# 我希望动态生成两个组合框,并希望同时将它们绑定在一起

C# 我希望动态生成两个组合框,并希望同时将它们绑定在一起,c#,winforms,sql-server-2008,C#,Winforms,Sql Server 2008,例如:我动态生成两个组合框box1和box2(在运行时单击add按钮),在box1的选中索引更改上,box2中的项目应该更改;两个框中的数据都是从数据库中提取的 int cnt = 0; SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["WindowsFormsApplication1.Properties.Settings.BusinessUltra1_2Connect

例如:我动态生成两个组合框box1和box2(在运行时单击add按钮),在box1的选中索引更改上,box2中的项目应该更改;两个框中的数据都是从数据库中提取的

      int cnt = 0;
    SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["WindowsFormsApplication1.Properties.Settings.BusinessUltra1_2ConnectionString"].ConnectionString);
    SqlConnection conb = new SqlConnection(ConfigurationManager.ConnectionStrings["WindowsFormsApplication1.Properties.Settings.BusinessUltra1_2ConnectionString"].ConnectionString);
    SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["WindowsFormsApplication1.Properties.Settings.BusinessUltra1_2ConnectionString"].ConnectionString);
    SqlConnection con2 = new SqlConnection(ConfigurationManager.ConnectionStrings["WindowsFormsApplication1.Properties.Settings.BusinessUltra1_2ConnectionString"].ConnectionString);
    SqlConnection con3 = new SqlConnection(ConfigurationManager.ConnectionStrings["WindowsFormsApplication1.Properties.Settings.BusinessUltra1_2ConnectionString"].ConnectionString);

    public Form2()
    {
        InitializeComponent();
    }

    private void btnAdd_Click(object sender, EventArgs e)
    {
        cnt++;
        AddNewComboBox();
        AddNewComboBox1();
    }

    private void AddNewComboBox()
    {
        ComboBox myNewComboBox = new ComboBox();
        myNewComboBox.Name = "ComboBox1" + cnt.ToString();
        con.Open();
        SqlDataAdapter adp = new SqlDataAdapter("select * from company", con);
        DataSet ds = new DataSet();
        adp.Fill(ds, "company");
        myNewComboBox.DataSource = ds.Tables["company"];
        myNewComboBox.DisplayMember = ds.Tables["company"].Columns[0].ToString();
        myNewComboBox.ValueMember = ds.Tables["company"].Columns[0].ToString();
        //Program.counteritems = myNewComboBox.SelectedValue.ToString();
        myNewComboBox.SelectedIndexChanged += new EventHandler(myNewComboBox_SelectedIndexChanged);

        flowLayoutPanel1.Controls.Add(myNewComboBox);

        con.Close();


    }



    private void AddNewComboBox1()
    {
       //string xyz = Program.counteritems;
        ComboBox myNewComboBox1 = new ComboBox();
        myNewComboBox1.Name = "ComboBox2" + cnt.ToString();
        conb.Open();
        SqlDataAdapter adp1 = new SqlDataAdapter("select * from company", con);
        DataSet ds1 = new DataSet();
        adp1.Fill(ds1, "company");
        myNewComboBox1.DataSource = ds1.Tables["company"];
        myNewComboBox1.DisplayMember = ds1.Tables["company"].Columns[1].ToString();
        myNewComboBox1.ValueMember = ds1.Tables["company"].Columns[1].ToString();
        //myNewComboBox_SelectedIndexChanged(sender);

        myNewComboBox1.SelectedIndexChanged += new EventHandler(myNewComboBox1_SelectedIndexChanged);

        flowLayoutPanel2.Controls.Add(myNewComboBox1);
        //changefunction();
        conb.Close();

    }
    void myNewComboBox_SelectedIndexChanged(object sender, EventArgs e)
    {

        var cbox1 = sender as ComboBox;
        if (cbox1 != null)
        {
            if (cbox1.Name == "ComboBox1" + cnt.ToString())
            {
                var cbox2 = flowLayoutPanel2.Controls.OfType<ComboBox>().Where(c => c.Name == "ComboBox2" + cnt.ToString()).FirstOrDefault();
                cbox2.SelectedValue = cbox1.SelectedValue.ToString();

                con2.Open();
                SqlDataAdapter adfgtyu = new SqlDataAdapter("select *  from Cat_Comp_Item where (Category_Name='" + cbox1.SelectedText + "') ", con2);
                DataSet dsft = new DataSet();
                adfgtyu.Fill(dsft, "Cat_Comp_Item");
                cbox2.DataSource = dsft.Tables["Cat_Comp_Item"];
                cbox2.DisplayMember = dsft.Tables["Cat_Comp_Item"].Columns[1].ToString();

                con2.Close();
           }
        } 

         //string combochange1 = ((ComboBox)sender).Text;
        //if (!string.IsNullOrEmpty(myNewComboBox.SelectedValue.ToString()))
        //{
        //    myNewComboBox1.SelectedValue = myNewComboBox.SelectedValue.ToString();
        //}


     }

    private void Form2_Load(object sender, EventArgs e)
    {

        AddNewComboBox();
        AddNewComboBox1();
    }


    void myNewComboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        MessageBox.Show("Press OK to select this ");
    }
int cnt=0;
SqlConnection con=新的SqlConnection(ConfigurationManager.ConnectionString[“WindowsFormsApplication1.Properties.Settings.BusinessUltra1\u 2ConnectionString”].ConnectionString);
SqlConnection conb=新的SqlConnection(ConfigurationManager.ConnectionString[“WindowsFormsApplication1.Properties.Settings.BusinessUltra1\u 2ConnectionString”].ConnectionString);
SqlConnection conn=新的SqlConnection(ConfigurationManager.ConnectionString[“WindowsFormsApplication1.Properties.Settings.BusinessUltra1\u 2ConnectionString”].ConnectionString);
SqlConnection con2=新的SqlConnection(ConfigurationManager.ConnectionString[“WindowsFormsApplication1.Properties.Settings.BusinessUltra1\u 2ConnectionString”].ConnectionString);
SqlConnection con3=新的SqlConnection(ConfigurationManager.ConnectionString[“WindowsFormsApplication1.Properties.Settings.BusinessUltra1\u 2ConnectionString”].ConnectionString);
公共表格2()
{
初始化组件();
}
私有void btnAdd_单击(对象发送者,事件参数e)
{
cnt++;
addbobox();
addBobox1();
}
私有void addBoBox()
{
ComboBox myNewComboBox=新ComboBox();
myNewComboBox.Name=“ComboBox1”+cnt.ToString();
con.Open();
SqlDataAdapter adp=新SqlDataAdapter(“从公司选择*”,con);
数据集ds=新数据集();
adp.Fill(ds,“公司”);
myNewComboBox.DataSource=ds.Tables[“company”];
myNewComboBox.DisplayMember=ds.Tables[“company”]。列[0]。ToString();
myNewComboBox.ValueMember=ds.Tables[“company”]。Columns[0]。ToString();
//Program.counteritems=myNewComboBox.SelectedValue.ToString();
myNewComboBox.SelectedIndexChanged+=新事件处理程序(myNewComboBox\U SelectedIndexChanged);
flowLayoutPanel1.Controls.Add(myNewComboBox);
con.Close();
}
私有void addnewcombox1()
{
//字符串xyz=Program.counteritems;
ComboBox MyNewcombox1=新ComboBox();
mynewcombox1.Name=“ComboBox2”+cnt.ToString();
conb.Open();
SqlDataAdapter adp1=新的SqlDataAdapter(“从公司中选择*”,con);
数据集ds1=新数据集();
adp1.填写(ds1,“公司”);
mynewcombox1.DataSource=ds1.Tables[“company”];
myNewComboBox1.DisplayMember=ds1.Tables[“company”]。Columns[1]。ToString();
myNewComboBox1.ValueMember=ds1.Tables[“company”]。Columns[1]。ToString();
//myNewComboBox\u选择的索引已更改(发件人);
myNewComboBox1.SelectedIndexChanged+=新事件处理程序(MyNewcomBox1_SelectedIndexChanged);
flowLayoutPanel2.Controls.Add(myNewcombox1);
//changefunction();
conb.Close();
}
void myNewComboBox\u SelectedIndexChanged(对象发送方,事件参数e)
{
var cbox1=发送方作为组合框;
if(cbox1!=null)
{
if(cbox1.Name==“ComboBox1”+cnt.ToString())
{
var cbox2=flowLayoutPanel2.Controls.OfType()。其中(c=>c.Name==“ComboBox2”+cnt.ToString()).FirstOrDefault();
cbox2.SelectedValue=cbox1.SelectedValue.ToString();
con2.Open();
SqlDataAdapter adfgtyu=新的SqlDataAdapter(“从目录组件项中选择*,其中(类别名称=”+cbox1.SelectedText+”),con2);
数据集dsft=新数据集();
adfgtyu.填充(dsft,“类别组件项目”);
cbox2.DataSource=dsft.Tables[“Cat组件项”];
cbox2.DisplayMember=dsft.Tables[“Cat_Comp_Item”]。列[1]。ToString();
con2.Close();
}
} 
//字符串combochange1=((ComboBox)sender).Text;
//如果(!string.IsNullOrEmpty(myNewComboBox.SelectedValue.ToString())
//{
//MyNewcombox1.SelectedValue=myNewComboBox.SelectedValue.ToString();
//}
}
私有void Form2_加载(对象发送方、事件参数e)
{
addbobox();
addBobox1();
}
void mynewcombox1\u SelectedIndexChanged(对象发送方,事件参数e)
{
MessageBox.Show(“按OK选择此项”);
}

我认为您应该绑定第一个组合框值和第二个组合框,在添加按钮上添加文本(--select--),在第一个组合框索引上添加字母更改绑定第二个组合框

    private void myNewComboBox_SelectedIndexChanged(object sender, EventArgs e)
    {
        var cbox1 = sender as ComboBox;
        if (cbox1 != null)
        {
            if (cbox1.Name == "ComboBox1")
            {
               var cbox2 = flowLayoutPanel2.Controls.OfType<ComboBox>().Where(c => c.Name == "ComboBox2").FirstOrDefault();
               cbox2.SelectedValue = cbox1.SelectedValue.ToString();
            }
        } 
    }

对ComboBox2执行同样的操作

实际上,问题是当我已经在加载事件中绑定了第二个框时,我无法在第一个框的所选事件更改中再次绑定它;orcomboBox.SelectedItem=项目;谢谢amol我现在已经更新了代码。您能告诉我可以做什么吗?您的公司表中有ID列或主键列吗?如果combobox1选择发生变化,那么您需要如何加载第二个Combox1?您需要在第二个COBOX中选择匹配的记录或筛选数据?我将简要介绍您我将简要介绍:-在加载事件中,我希望创建2个组合框,并且两者都应从同一个表的不同列中选择数据,例如组合框1(列1-国家)和组合框2(列2-州)现在,当有人更改Combox1的选择时,combox2的同时值应该是see。我也没有主键,在表country和States中只有两列。您建议的代码在某种程度上解决了我的问题,但是,,,,请帮我改进一下,问题是当我从combobox1中选择某个内容时,Combox2会变空
ComboBox myNewComboBox = new ComboBox();
myNewComboBox.Name = "ComboBox1";