0

例: 2 つのコンボ ボックス box1 と box2 を動的に生成し (実行時に追加ボタンをクリックして)、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 ");
    }
4

2 に答える 2

1

最初のコンボボックスの値をバインドし、2 番目のコンボボックスを追加ボタンにテキスト (---select---) だけを追加し、最初のコンボボックスのインデックス変更に文字を追加する必要があると思います。

于 2013-08-29T05:37:21.537 に答える
0

以下のようにできます

    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.ValueMemberこれを行うには、会社のテーブルにcomboBox1.ValueMember同じ列を設定する必要があります。そのためにID列または主キー列を選択します。

また、以下のようにコンボボックスを作成するときにComboBox1、コンボボックスに名前を付けますComboBox2

ComboBox myNewComboBox = new ComboBox();
myNewComboBox.Name = "ComboBox1";

ComboBox2 についても同じことを行います。

于 2013-08-29T05:47:03.340 に答える