2016-10-06 15 views
0

私のフォームにはpanel1のコンボボックスがいくつかあります。このコードを使用して、同じデータソースをpanel1コンボボックスに追加します。複数のコンボボックスを同じデータソースに設定する

foreach (Control x in this.Panel1.Controls) 
{ 
    if (x is ComboBox) 
    { 
     ((ComboBox)x).DataSource = new BindingSource(tblbatteryBindingSource, null); 
     ((ComboBox)x).DisplayMember = "description"; 
    } 
} 

新しいバインディングソースの使用は、同じデータソースを使用しているためです。

しかし、問題はここにあります:私のデータソースのテーブルに私はこのような列を持っています。ID - 名前 - 私は、コンボボックス内の同じNAMEMで2つの行を追加していた場合、それは最初のものだけカウントを返し

をカウントし、それは他人を無視する。

より理解するためのサンプルは:

Id  Name  Count 
1  first 10 
2  second 10 
3  third 10 
4  first 12 
5  first 5 

これは私のテーブル^

が、ある今コンボボックスで私は値数を選択する際には、ラベルに現れている。

Id-> 1  cmb1.SelectedItem = "first"  label1.Text = "10" 
Id-> 2  cmb1.SelectedItem = "second"  label1.Text = "10" 
Id-> 3  cmb1.SelectedItem = "third"  label1.Text = "10" 
Id-> 4  cmb1.SelectedItem = "first"  label1.Text = "10" 
Id-> 5  cmb1.SelectedItem = "first"  label1.Text = "10" 

これは私に何が起こったかです。しかしそれは真実ではありません。

Id-> 1  cmb1.SelectedItem = "first"  label1.Text = "10" 
Id-> 2  cmb1.SelectedItem = "second"  label1.Text = "10" 
Id-> 3  cmb1.SelectedItem = "third"  label1.Text = "10" 
Id-> 4  cmb1.SelectedItem = "first"  label1.Text = "12" 
Id-> 5  cmb1.SelectedItem = "first"  label1.Text = "5" 

私の悪い英語と悪い説明のために申し訳ありません。

どうすればいいですか?私はすでにどこでも検索しました!

答えて

0

ComboBoxのDisplayMemberとValueMemberに正しい列名を指定する必要があります。私はそれが役に立てば幸い:)

private void Form1_Load(object sender, EventArgs e) 
    {   

     label1.Text = label2.Text = label3.Text = String.Empty; 

     // strCon is connection string 
     SqlConnection con = new SqlConnection(strCon); 
     SqlCommand cmd = new SqlCommand("Select * from testTable", con); 
     DataTable dt = new DataTable(); 
     SqlDataAdapter da = new SqlDataAdapter(); 
     da.SelectCommand = cmd; 

     con.Open(); 
     da.Fill(dt); 
     con.Close(); 

     foreach (Control x in this.Panel1.Controls) 
     { 
      if (x is ComboBox) 
      { 
       ((ComboBox)x).DataSource = new BindingSource(dt, null); 
       ((ComboBox)x).DisplayMember = "Name"; 
       ((ComboBox)x).ValueMember = "Count"; 
      } 
     } 
    } 

    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     label1.Text = comboBox1.SelectedValue.ToString(); 
    } 

    private void comboBox2_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     label2.Text = comboBox2.SelectedValue.ToString(); 
    } 

    private void comboBox3_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     label3.Text = comboBox3.SelectedValue.ToString(); 
    } 

:あなたの結果を確認するために

(ComboBox)x).DisplayMember = "Name"; 
(ComboBox)x).ValueMember = "Count"; 

私がテストしている次のコード:あなたの例のテーブルごとに次の点を確認してください

関連する問題