#c# #combobox
#c# #поле со списком
Вопрос:
У меня есть несколько списков со списком в моей форме в 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 — Name — Count
Когда я добавляю две строки с одинаковым именем в поле со списком, он возвращает только первое значение и игнорирует другие.
Пример для большего понимания:
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:
Вам необходимо указать правильные имена столбцов для 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();
}
Надеюсь, это поможет 🙂