Я добавил DataSet к решению и удалил таблицу Сотрудники (из Северный ветер ) в конструкторе, который автоматически создал employeeBindingSource . Я бросил в поле со списком и кнопку, и я установил DataSource и DataMember комбо. Затем я обработал некоторые события:
private void Form1_Load(object sender, EventArgs e)
{
this.employeesTableAdapter.Fill(this.dS.Employees);
}
private int _i = 0;
private void button1_Click(object sender, EventArgs e)
{
ComboBox combo = new ComboBox();
combo.DataSource = this.employeesBindingSource;
combo.DisplayMember = this.dS.Tables[0].Columns[++_i].ColumnName;
combo.Location = new Point(comboBox1.Location.X, comboBox1.Location.Y + comboBox1.Height * _i);
this.Controls.Add(combo);
}
Таким образом, при каждом щелчке новая форма добавляется в форму динамически прямо под предыдущей комбинацией. Комбо также привязано к следующему столбцу в таблице «Сотрудники» (без проверки границ).
Как видите, это довольно просто. Надеюсь это поможет.
Хорошо, вот вариант кода, который может помочь вам с тем другим вопросом, который вы задали в комментариях к этому ответу.
Предполагается, что у вас есть форма с кнопкой и DataSet с таблицей Сотрудники . При нажатии кнопки он создает комбо и заполняет его данными (столбец Имя из Сотрудники ). Каждый раз, когда вы добавляете комбо, он получает свою собственную копию данных (это важно, чтобы иметь возможность удалять элементы из одного комбо за раз). Затем каждый раз, когда вы выбираете значение в комбо, комбо отключается, и у других комбо нет этого выбранного значения в их списке.
private int _i = 0;
private void button1_Click(object sender, EventArgs e)
{
DataSet dataS = dS.Clone();
this.employeesTableAdapter.Fill((DS.EmployeesDataTable)dataS.Tables[0]);
BindingSource bindSource = new BindingSource(dataS, "Employees");
ComboBox combo = new ComboBox();
combo.Name = this.dS.Tables[0].Columns[0].ColumnName + (++_i).ToString();
combo.DataSource = bindSource;
combo.DisplayMember = this.dS.Tables[0].Columns[1].ColumnName; //This column is the Name of Employee
combo.Location = new Point(button1.Location.X, button1.Location.Y + combo.Height * _i);
combo.SelectedIndexChanged += new EventHandler(comboBox_SelectedIndexChanged);
this.Controls.Add(combo);
}
private void comboBox_SelectedIndexChanged(object sender, EventArgs e)
{
foreach (Control ctrl in this.Controls)
{
if (ctrl is ComboBox && ctrl != sender && ctrl.Enabled)
{
((BindingSource)((ComboBox)ctrl).DataSource).RemoveAt(((ComboBox)sender).SelectedIndex);
}
}
((ComboBox)sender).Enabled = false;
}
Это очень близко к тому, что вам нужно, или легко адаптируется к вашим ожиданиям. Наслаждайтесь и, пожалуйста, выберите ответ в качестве принятого. Спасибо!