Получение измененных значений динамически создаваемых ComboBox
Пишу калькулятор времени работы сотрудников и загруженности кабинетов. Программа принимает в TextBox'ы фамилии сотрудников, список которых передаёт в динамически создаваемые ComboBox'ы (количество зависит от числа рабочих дней в месяце). После нажатия на кнопку генерации ComboBox'ов список сотрудников в них уже не переопределяется (это первая, но не самая важная проблема). Когда пользователь выбирает в одном из ComboBox'ов фамилию сотрудника и нажимает кнопку обновления данных, время занятости сотрудника и кабинета переопределяется через инкремент. И вот тут - действительно серьезная проблема: если после обновления данных заменить в ComboBox'е фамилию А на В (администратор меняет одного сотрудника на другого), сработает инкремент для В, но не декремент для А. К тому же на повторный выбор сотрудника в уже занятой им ячейке тоже срабатывает инкремент. К сожалению, я ещё не изучал SQL. Подскажите, пожалуйста, есть ли способ решить проблему без обращения к базам данных.
''' // список сотрудников public List Doctors = new List { "пусто", "пусто", "пусто" };
// счётчик занятых ячеек для каждого сотрудника
public double Dr_1_cells_count = 0.0;
public double Dr_2_cells_count = 0.0;
// КНОПКА ОБНОВЛЕНИЯ СПИСКА СОТРУДНИКОВ И ДАННЫХ О НАГРУЗКЕ КАЖДОГО
private void btn_Doctors_Click(object sender, EventArgs e)
{
// считывание фамилий сотрудников из текст-боксов в список персонала
Doctors[0] = textBox6.Text;
Doctors[1] = textBox7.Text;
// вывод времени работы сотрудников
label5.Text = Doctors[0] + $" - {Dr_1_cells_count} часов";
label6.Text = Doctors[1] + $" - {Dr_2_cells_count} часов";
}
// динамическое создание ComboBox'ов
public void Generate_Cells()
{
for (int i = 1; i < 100; i++)
{
ComboBox Combo = new ComboBox();
flowLayoutPanel1.Controls.Add(Combo);
foreach (string doctor in Doctors)
{
Combo.Items.Add(doctor); // добавление сотрудников из списка администратора в ячейки приема
}
Combo.SelectedIndexChanged += new System.EventHandler(TimeCounter); // в качестве события при выборе назначена функция обсчёта времени
flowLayoutPanel1.Controls.Add(Combo); // добавление ячейки в столбец
}
}
// ПРОВЕРКА СОДЕРЖИМОГО ЯЧЕЙКИ
public void TimeCounter(object sender, System.EventArgs e)
{
ComboBox currentCombo = (ComboBox)sender;
if (currentCombo.SelectedItem.ToString() == Doctors[0])
{
Dr_1_cells_count++;
}
else if (currentCombo.SelectedItem.ToString() == Doctors[1])
{
Dr_2_cells_count++;
}
}
'''