我在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"
抱歉我的英语不好,解释不好。
请告诉我该怎么办?我已经到处搜索过了!
答案 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();
}
我希望它有所帮助:)