Я пытаюсь сделать приложение WPF.У меня есть кнопка, которая генерирует 100 комбинированных списков в сетке.Я хочу, чтобы эти выпадающие списки наследовали значения в таблице MySQL.Поэтому я хочу, чтобы все эти 100 комбинированных списков имели одинаковые значения внутри комбинированных списков.Так, например, у меня есть таблица с именем test, которая имеет и ID (с автоматическим приращением) и число.Внутри этой таблицы я добавил 3 записи, 1,2 и 3. Я хочу, чтобы все мои выпадающие списки отображали под ней 1,2 и 3.
private void Add_New_Entry(object sender, RoutedEventArgs e)
{
grid.RowDefinitions.Clear();
for (int x = 0; x < number; x++)
{
grid.RowDefinitions.Add(new RowDefinition());
stekker1 = new ComboBox();
stekker1.Name = "testkastComboBox" + number.ToString();
stekker1.ItemsSource = multistore;
Grid.SetRow(stekker1, x);
Grid.SetColumn(stekker1, 0);
aansluitpin1 = new ComboBox();
Grid.SetRow(aansluitpin1, x);
Grid.SetColumn(aansluitpin1, 1);
sep = new Separator();
Grid.SetRow(sep, x);
Grid.SetColumn(sep, 2);
lab1 = new Label();
int labelnumber = x + 1;
lab1.Content = labelnumber.ToString();
lab1.HorizontalAlignment = HorizontalAlignment.Center;
Grid.SetRow(lab1, x);
Grid.SetColumn(lab1, 3);
sep1 = new Separator();
Grid.SetRow(sep1, x);
Grid.SetColumn(sep1, 4);
stekker2 = new ComboBox();
Grid.SetRow(stekker2, x);
Grid.SetColumn(stekker2, 5);
aansluitpin2 = new ComboBox();
Grid.SetRow(aansluitpin2, x);
Grid.SetColumn(aansluitpin2, 6);
grid.Children.Add(stekker1);
grid.Children.Add(aansluitpin1);
grid.Children.Add(sep);
grid.Children.Add(lab1);
grid.Children.Add(sep1);
grid.Children.Add(stekker2);
grid.Children.Add(aansluitpin2);
}
}
Это функция, которую я использую.Когда я нажимаю кнопку, эта функция вызывается.Я вижу сетку 7 на 100: 
Следующий код:
private void aanPinStekKast(object sender, EventArgs e)
{
//ClearTable();
try
{
//multistore.Clear();
AantalPinnenStekkersTestkast.Items.Clear();
connection.Open();
// Deze SQL string maakt een table aan met daarin de parameters.
sqlstring = "SELECT * FROM test";
MySqlCommand cmd = new MySqlCommand(sqlstring, connection);
MySqlDataReader rdr;
rdr = cmd.ExecuteReader();
while (rdr.Read())
{
AantalPinnenStekkersTestkast.Items.Add(rdr["number"]);
}
cmd.Dispose();
connection.Close();
}
catch (MySqlException ex)
{
MessageBox.Show(ex.Message + connectionString);
//button1.BackColor = Color.Red;
connection.Close();
}
}
Работает, извлекает данные и добавляет их в выпадающий список.,Как я могу сделать так, чтобы каждый первый комбинированный список в строке добавлял данные, извлеченные из таблицы MySQL?Извините за мой английский, это не мой родной язык.
edit1: я использовал метод FillComboBox, указанный Брэдли Грейнджером, и добавил функции DropDownOpened и SelectionChanged для решения моих проблем.Работает отлично и работает без проблем.Мой компьютер может легко обрабатывать количество запросов MySQL.
private void Add_New_Entry()
{
connection.Open();
for (int x = 0; x < number; x++)
{
grid.RowDefinitions.Add(new RowDefinition());
stekker1 = new ComboBox();
aansluitpin1 = new ComboBox();
sep = new Separator();
lab1 = new Label();
sep1 = new Separator();
stekker2 = new ComboBox();
aansluitpin2 = new ComboBox();
FillStekker1(stekker1,x);
FillAansluitpin1(aansluitpin1,x);
FillSeparator1(sep, x);
FillLabel(lab1, x);
FillSeparator2(sep1,x);
FillStekker2(stekker2,x);
FillAansluitpin2(aansluitpin2,x);
grid.Children.Add(stekker1);
grid.Children.Add(aansluitpin1);
grid.Children.Add(sep);
grid.Children.Add(lab1);
grid.Children.Add(sep1);
grid.Children.Add(stekker2);
grid.Children.Add(aansluitpin2);
}
connection.Close();
}
#endregion
#region set parameters van elementen in grid
private void FillLabel(Label lab, int num)
{
lab.Height = 30;
int labelnumber = num + 1;
lab.Content = labelnumber.ToString();
lab.HorizontalAlignment = HorizontalAlignment.Center;
Grid.SetRow(lab, num);
Grid.SetColumn(lab, 3);
}
private void FillStekker1(ComboBox comboBox, int num)
{
comboBox.ItemsSource = numlistTestkast;
comboBox.SelectionChanged += Aansluitpin1_SelectionChanged;
comboBox.Height = 30;
Grid.SetRow(comboBox, num);
Grid.SetColumn(comboBox, 0);
}
private void populateElement1(object sender, EventArgs e)
{
try
{
ComboBox cb = sender as ComboBox;
cb.Items.Clear();
connection.Open();
string num = aPin1;
sqlstring = string.Format("SELECT * FROM testkastpins WHERE stekkernummer = {0}",num);
MySqlCommand cmd = new MySqlCommand(sqlstring, connection);
MySqlDataReader rdr;
rdr = cmd.ExecuteReader();
while (rdr.Read())
{
cb.Items.Add(rdr["pinnummer"]);
}
cmd.Dispose();
connection.Close();
}
catch (MySqlException ex)
{
MessageBox.Show(ex.Message + connectionString);
connection.Close();
}
}
private void populateElement2(object sender, EventArgs e)
{
try
{
ComboBox cb = sender as ComboBox;
cb.Items.Clear();
connection.Open();
string num = aPin2;
sqlstring = string.Format("SELECT * FROM testpaneelpins WHERE stekkernummer = {0}", num);
MySqlCommand cmd = new MySqlCommand(sqlstring, connection);
MySqlDataReader rdr;
rdr = cmd.ExecuteReader();
while (rdr.Read())
{
cb.Items.Add(rdr["pinnummer"]);
}
cmd.Dispose();
connection.Close();
}
catch (MySqlException ex)
{
MessageBox.Show(ex.Message + connectionString);
connection.Close();
}
}
private void FillStekker2(ComboBox comboBox, int num)
{
comboBox.Height = 30;
comboBox.SelectionChanged += Aansluitpin2_SelectionChanged;
comboBox.ItemsSource = numlistTestpaneel;
Grid.SetRow(comboBox, num);
Grid.SetColumn(comboBox, 5);
}
private void FillAansluitpin1(ComboBox comboBox, int num)
{
comboBox.Height = 30;
//comboBox.ItemsSource = store1;
comboBox.DropDownOpened += new EventHandler(populateElement1);
Grid.SetRow(comboBox, num);
Grid.SetColumn(comboBox, 1);
}
private void Aansluitpin1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
ComboBox cb = sender as ComboBox;
aPin1 = cb.SelectedValue.ToString();
debug.Text += aPin1;
}
private void Aansluitpin2_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
ComboBox cb = sender as ComboBox;
aPin2 = cb.SelectedValue.ToString();
debug.Text += aPin2;
}
private void FillAansluitpin2(ComboBox comboBox, int num)
{
comboBox.Height = 30;
comboBox.DropDownOpened += new EventHandler(populateElement2);
Grid.SetRow(comboBox, num);
Grid.SetColumn(comboBox, 6);
}
private void FillSeparator1(Separator separator, int num)
{
separator.Height = 30;
Grid.SetRow(separator, num);
Grid.SetColumn(separator, 2);
}
private void FillSeparator2(Separator separator, int num)
{
separator.Height = 30;
Grid.SetRow(separator, num);
Grid.SetColumn(separator, 4);
}