-1

Есть у меня 10 comboBox.

https://pastenow.ru/CVYP2

Мне нужно их заполнить элементами из dataGridView, которая выглядит вот так:

введите сюда описание изображения

Можно ли как-нибудь заполнить эти comboBox через цикл? Как-нибудь вот так:

введите сюда описание изображения

Проблема в том, что у меня всегда разное количество Ингредиентов, при выборе разного товара, поэтому нельзя просто написать через присвоение для каждого, т.к. будут ошибки.

Конечно, можно сделать вот так:

введите сюда описание изображения

Но это выглядит крайне тупо и некрасиво

Frehzy
  • 1,316
  • можно пустой catch на каждое присвоение в цикле поставить, что сможет присвоиться, то присвоится: for { try { combo=cell } catch {} } – Алексей Обухов Jun 20 '21 at 10:12
  • Не особо понял.... – Frehzy Jun 20 '21 at 10:17
  • расшифровываю псевдокод 'combo=cell': comboBox[i].Text = dataGridView1.Rows[0].Cells[i].Value.ToString(). я не претендую на решение, но обратил внимание, что в первом случае нет обработки исключений (и ожидание ошибок), а во втором случае есть обработчик. – Алексей Обухов Jun 20 '21 at 10:28
  • 2
    Контролы на форму добавлять можно не только в дизайнере. Следовательно и изменять их можно програмно не только по именам. Да и вообще контролам, которых много, смысла давать имена мало. https://ru.stackoverflow.com/a/1296394/373567 foreach (ComboBox cbox in this.Controls.OfType<ComboBox>()) { ... } или ComboBox[] boxes = this.Controls.OfType<ComboBox>().ToArray(), ну а как с массивом работать в цикле вы же знаете? – aepot Jun 20 '21 at 10:33
  • 2
    И код вставлять надо текстом. – aepot Jun 20 '21 at 10:38
  • Да, спасибо огромное. Единственная странность - он почему-то добавляет в таком порядке: 6,7,8,9,10,5,4,3,2,1 (число - номер combobox) https://pastenow.ru/CW0B1 – Frehzy Jun 20 '21 at 10:48
  • 1
    В каком порядке комбобоксы были добавлены на форму, в таком и добавляет. – aepot Jun 20 '21 at 11:05
  • 1
    this.Controls.OfType<ComboBox>().OrderBy(c => int.Parse(c.Name.SubString(8))), но это само по себе костыль. – aepot Jun 20 '21 at 11:20
  • 1
    Спасибо. Всё идеально стало работать – Frehzy Jun 20 '21 at 11:47
  • 1
    Вы можете опубликовать решение в ответе, если считаете, что оно может быть полезно будущим посетителям и позднее принять ответ. – aepot Jun 20 '21 at 11:48

1 Answers1

1

Итак, вот такое конечное решение получилось:

            int temp = 1; //добавление ингредиентов в комбобоксы
            try
            {
                ComboBox[] boxes = this.Controls.OfType<ComboBox>().ToArray();
                for (int i = 0; i < boxes.Length; i++)
                {
                    boxes[i].Text = dataGridView1.Rows[0].Cells[temp].Value.ToString().Split(',')[0];
                    temp++;
                }
            }
            catch { }
Frehzy
  • 1,316