将多个组合框设置为相同的数据源

时间:2016-10-06 11:49:19

标签: c# combobox

我在panel1的表单上有几个组合框。我使用此代码将相同的数据源添加到panel1 comboBoxes;

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

使用新的绑定源是因为使用了相同的数据源。

但是这里有一个问题:在我的数据源表中我有这样的列:Id - Name - Count

当我在组合框中添加具有相同namem的两行时,它只返回第一个计数而忽略其他计数。

更多理解的示例:

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"

抱歉我的英语不好,解释不好。

请告诉我该怎么办?我已经到处搜索过了!

1 个答案:

答案 0 :(得分:0)

您需要为ComboBox的DisplayMember和ValueMember提供正确的列名。根据您的示例表,请检查以下内容:

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

我已经测试了以下代码来验证您的结果:

    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();
    }

我希望它有所帮助:)