Не изменяется значение SelectedValue у ComboBox

Рейтинг: 0Ответов: 1Опубликовано: 28.01.2023

Я динамически формирую tableLayoutPanel, туда добавляю combobox. Данные беру из бд и записываю в виде словаря(мне так просто проще работать). Потом данные поставлю в combobox в виде источника данных, предварительно представив его в виде List. Далее пытаюсь задать свойство selectedValve, что бы по умолчанию было выбрано нужное мне значение. Но при отладке кода это свойство остаётся пустым и выбрано самое первое значение из словаря. Я уже давненько разбирался с подобной проблемой и успешно решил её, но тут я всё перепробовал и даже не знаю в чём может быть причина.

Вот отрывок данного фрагмента:

foreach (Dictionary<string, string> route in AllRoutes.Values)
        {

        TableLayoutPanel table = tableLayoutPanel8;     
   
        Dictionary<int, string> DictionaryBuses = new Dictionary<int, string>();

        foreach (Dictionary<string, string> bus in AllBuses.Values)
        {
            DictionaryBuses.Add(Convert.ToInt32(bus["id"]), bus["mark"]);
        }
        table.RowCount = table.RowCount + 1;
        table.RowStyles.Add(new RowStyle(SizeType.Absolute, 30F));
        table.Controls.Add(new ComboBox()
        {
            Name = "RouteBus_" + route["id"],
            DropDownStyle = ComboBoxStyle.DropDownList,
            DisplayMember = "Value",
            ValueMember = "Key",
            //DataSource = new BindingSource(DictionaryBuses, null),
            DataSource = DictionaryBuses.ToList(),
            SelectedValue = Convert.ToInt32(route["id_bus"]),
            Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)))
        }, 0, table.RowCount - 1);

Пробовал и менять и после создания ComboBox, пробовал вручную задавать значение. Вообщем я без понятия в чём может быть причина.

Вот фото что я получаю при компиляции: введите сюда описание изображения

в выводе консоли последние 3 строчки в кавычках это я вывожу значение SelectedValve

Ответы

▲ 0Принят

Решил проблему выполнением асинхронной функции, которая через некоторый промежуток перебирает все нужные мне ComboBox'ы и задаёт в них нужное мне значение. Конечно костыль, но это работает!

Ниже прилагаю моё решение:

await EditTextBox(table);

Код функции EditTextBox:

private async Task EditTextBox(TableLayoutPanel table)
{
    await Task.Yield();
    foreach (Dictionary<string, string> route in AllRoutes.Values)
    {
        ((ComboBox)table.Controls["RouteBus_" + route["id"]]).SelectedValue = Convert.ToInt32(route["id_bus"]);
    }
}