ComboBox
Компонент ComboBox представляет собой комбинированный список, объединяющий функции компонентов ListBox и EditBox.
Работа с компонентом
Компонент позволяет пользователю выбрать значение из списка или задать собственное.
Отличие компонента ComboBox от схожего по функциям компонента ListBox заключается в следующем:
ComboBox разрешает пользователю вводить собственные значения;
ComboBox может быть как развернутым, так и свернутым (ListBox всегда развернут);
ComboBox не допускает множественного выбора.
Основное свойство компонента — Items. Заполнить данный список можно во время разработки (проектирования) формы, для этого следует нажать кнопку с многоточием около свойства в окне « Инспектор объектов » либо в контекстном меню компонента выбрать пункт « Элементы ».
Основное событие компонента OnChange наступает при изменении текста в окне редактирования в результате прямого редактирования или в результате выбора из списка.
Стиль отображения компонента определяется свойством Style.
Выбор пользователя или введенный им текст можно определить по значению свойства Text.
Индекс выбранного пользователем элемента можно определить по значению свойства ItemIndex.
ComboBox in C#
In Windows Forms, ComboBox provides two different features in a single control, it means ComboBox works as both TextBox and ListBox. In ComboBox, only one item is displayed at a time and the rest of the items are present in the drop-down menu. The ComboBox is a class in C# and defined under System.Windows.Forms Namespace. You can create ComboBox using the two different ways:
1. Design-Time: It is the easiest method to create a ComboBox control using the following steps:
- Step 1: Create a windows form as shown in the below image:
Visual Studio -> File -> New -> Project -> WindowsFormApp
- Step 2: Drag the ComboBox control from the ToolBox and drop it on the windows form. You are allowed to place a ComboBox control anywhere on the windows form according to your need.

- Step 3: After drag and drop you will go to the properties of the ComboBox control to set the properties of the ComboBox according to your need.
Run-Time: It is a little bit trickier than the above method. In this method, you can set create your own ComboBox control using the ComboBox class. Steps to create a dynamic ComboBox:
- Step 1: Create a combobox using the ComboBox() constructor is provided by the ComboBox class.
- Step 2: After creating ComboBox, set the properties of the ComboBox provided by the ComboBox class.
- Step 3: And last add this ComboBox control to form using Add() method.
Как заполнить combobox c
Собственно в чём суть дела, нет ничего проще заполнения ComboBox-а из DataSet-а.
Делается это вот так:
Но работает зараза при больших выборках — адски медленно!
Выхода из этого 2:
1. Заполнять ComboBox из DataReader-а перебором построчно, как ни странно получается в разы быстрее.
Вот так:
2. Заполнять через DataSet, но один раз при запуске приложения и больше не трогать без необходимости, закидывать в DataSet всю выборку а потом играть с ней фильтрами. (лично мне этот метод нравится несколько больше).
Комментарии:
Здравствуйте.
Я наверно не совсем по теме, прошу не пинать!
Заполняю ComboBox из DATASET
в «ComboBox.SelectedValue» седержится «ID» выбранного «fio».
Подскажите пожалуйста, как этот «id» из «ComboBox.SelectedValue» можно передать в переменную «int»?
«comboBox1.SelectedValue» это тип «object» и студия ругается:
«Не удается неявно преобразовать тип „object“ в „int“. Существует явное преобразование (возможно, пропущено приведение типов)»
Хотя ответ на этот вопрос уже из принципа интересен, объясню что хочу сделать, может есть другой вариант.
Хочу сделать возможность редактирования «fio» прямо в «ComboBox», но после изменения «fio», «ComboBox.SelectedValue» очищается, а «UPDATE» без «ID» не провернуть.
Ой. Не глядя написал, сорри.
Я обычно так использую (в SQL запросы вставляю параметры):
Думал что в оригинале целое.
Думаю в случае с «INT» можно сделать так:
программа компилируется и запускается, но при запуске формы, в которой эта строка находится, пишет: «Входная строка имела неверный формат.»
Вот так вот посмотри что там:
Либо строка не может быть в целое преобразована, что вряд-ли скорее всего там пусто, никакого значения не выбрано.
Поставил на клик кнопки.
Выбираю пункт в ComboBox, нажимаю кнопку, выскакивает ID выбранного пункта.
А до этого как было?
Надо было без кнопок, а как было просто перед строчкой где к целому преобразует воткнуть это сообщение, чтобы убедиться, что там действительно число.
А можно просто кусок кода — где это происходит?
При открытии формы в combobox вытягиваются данные.
при событии SelectedIndexChanged должно присваиваться
а при нажатии кнопки хочу чтоб отрабатывал запрос
В итоге, запускаем программу, выскакивает мессаг «System.Data.DataRowView»
Потом студия выдаёт сообщение «FormatException не обработано пользовательским кодом, чуть ниже (Входная строка имела неверный формат.)» и этот мессаг указывает на строку «i = int.Parse(cB_Transport_Name.SelectedValue.ToString());»
Тогда думаю надо сделать так, раз Value возвращает объект «System.Data.DataRowView», то берем его и вытаскиваем из строки нужное поле:
Не удается неявно преобразовать тип «object» в «System.Data.DataRowView». Существует явное преобразование (возможно, пропущено приведение типов)
«cB_Transport_Name.SelectedValue» — подчеркнута красным.
Попробуй преобразовать явно:
InvalidCastException не обработано пользовательским кодом
Не удалось привести тип объекта «System.Int32» к типу «System.Data.DataRowView».
Вот сделал пример: ComboBoxSelect.rar
Там всё сделано по первому варианту и работает.
Думаю если посмотреть и сделать аналогично должно всё заработать.
Понял в чем бок.
Присвоение работает, НО.
До запуска формы (при работе с базой) событие «SelectedIndexChanged» отрабатывает 3 раза.
Как с этим бороться?
Ну — первое что приходит на ум, это создать событие не в дизайнере а по завершению запуска формы, программно.
Во вторых, можно ещё какую нибудь переменную флаг задать, который по умолчанию имеет атрибут False. И только по завершении загрузки задавать ему атрибут True. А в событии проверять если False — то не выполнять и всё, если True — то выполнять.
Если не сложно, можно первый вариант подробнее расписать и архив с исходниками выложить!?