Как заполнить combobox из базы данных c
Перейти к содержимому

Как заполнить combobox из базы данных c

  • автор:

Как заполнить ComboBox данными из ListBox(он заполняется по введённым данным в TextBox)?

Поймите что такое WPF, а не слепо делайте фиг пойми что. WPF, это XAML и Binding, вот два ваших инструментария, на которых должен базироваться весь проект. Если вы их не используете, вы страдаете, ваш проект страдает, получает уйму костылей, получает падения в производительности. Познайте азы, научитесь делать элементарные вещи! Вот вы хотите заполнить два контрола одинаковыми объектами, значит должен быть класс, который содержаит в себе публичное свойство коллекции, далее этот класс должен быть задан как DataContext окна, ну а в XAML просто <. ItemsSource = "«/> . Сложно?

Как заполнить combobox из базы данных c

Практическое руководство. Связывание элемента управления ComboBox или ListBox с данными в Windows Forms

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

Привязка элемента управления ComboBox или ListBox

Присвойте свойству DataSource объект источника данных. Возможные источники данных включают привязку BindingSource к данным, таблице данных, представлению данных, набору данных, диспетчеру представлений данных, массиву или любому классу, реализующему интерфейс IList. Дополнительные сведения см. в разделе Источники данных, поддерживаемые Windows Forms.

Если выполняется привязка к таблице, присвойте свойству DisplayMember имя столбца в источнике данных.

При привязке к IList, задайте для элемента отображения общедоступное свойство типа в списке.

При привязке к источнику данных, который не реализует интерфейс IBindingList, например ArrayList, данные привязанного элемента управления не будут обновляться при обновлении источника данных. Например, если поле со списком привязано к ArrayList, а данные добавляются в ArrayList, эти новые элементы не будут отображаться в поле со списком. Однако можно принудительно обновить поле со списком, вызвав методы SuspendBinding и ResumeBinding в экземпляре класса BindingContext, к которому привязан элемент управления.

WPF привязка (обращение) значений БД к ComboBox?

Здравствуйте, обучаюсь сейчас работе с wpf, и появился вопрос как осуществить привязку значений из таблицы БД к СomboBox, или точнее как в ComboBox вернуть значения из БД. Смысл в том, чтобы значения из таблицы Education появились в виде списка в ComboBox, а потом через SelectionChanged отправить выбранный вариант в значение таблицы InformationPatient.
Пример самого окна WPF
60a77d25490f5970386611.png
Здесь добавленная к WPF база данных
60a77ff27d07f868219552.png
Это код XAML данного WPF окна

Здесь приведен код C#

  • Вопрос задан более года назад
  • 1077 просмотров
  • Facebook
  • Вконтакте
  • Twitter

60a788c11e64f361839389.png

Вся проблема в том, что при использовании
EduCombo.ItemsSource = DB.Educations.ToList();
в самом приложении появляется это

Как заполнить 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 — то выполнять.

Если не сложно, можно первый вариант подробнее расписать и архив с исходниками выложить!?

Заполнение списка в объекте ComboBox из базы данных

Собственно в чём суть дела, нет ничего проще заполнения ComboBox-а из DataSet-а.
Делается это вот так:
SqlConnection connRC = new SqlConnection(MainParams.ConStr);
string command = «SELECT Kod, Nam FROM Produkt ORDER BY Nam»;
SqlDataAdapter da = new SqlDataAdapter(command, connRC);

DataSet ds = new DataSet();
connRC.Open();
da.Fill(ds);
connRC.Close();

comboBox1.DataSource = ds.Tables[0];
comboBox1.DisplayMember = «Nam»;
comboBox1.ValueMember = «Kod»;

Но работает зараза при больших выборках — адски медленно!

Выхода из этого 2:
1. Заполнять ComboBox из DataReader-а перебором построчно, как ни странно получается в разы быстрее.
Вот так:
SqlConnection con = new NpgsqlConnection(MainParams.ConnectionString);
SqlCommand com = new NpgsqlCommand(«select * from Users order by NAME», con);
con.Open();
SqlDataReader reader;
reader = com.ExecuteReader();
while (reader.Read())

catch

2. Заполнять через DataSet, но один раз при запуске приложения и больше не трогать без необходимости, закидывать в DataSet всю выборку а потом играть с ней фильтрами. (лично мне этот метод нравится несколько больше).

Related posts:

  1. Как увеличить шрифт в терминале ubuntu
  2. Как включить crossfire nvidia
  3. Как узнать текущую дату
  4. Как копировать в mc

Заполнить Combobox данными из таблицы БД, в зависимости от значения выбранного в другом Combobox’е

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

Мне нужна помощь с решением небольшой задачи. Сам уже много чего перепробовал, но не выходит( Пишу программу для курсового (для управляющего отелем). У меня есть таблица Rooms с полями room_id и room_type, мне нужно, чтобы при выборе типа комнаты для резервирования в combobox с room_id подставлялись все id комнат из таблицы Rooms, которые имеют данный тип (Single, к примеру). Надеюсь понятно объяснил. Ниже код загрузки данных в комбобоксы(из form_load).

// loading data to combobox3 DataTable Rooms = new DataTable(); using (SqlConnection coon = new SqlConnection(conString)) < SqlCommand cmd = new SqlCommand(); cmd.Connection = coon; cmd.CommandText = "select room_type from Rooms where reservation_id = 0"; SqlDataAdapter adapter = new SqlDataAdapter(cmd); adapter.Fill(Rooms); >for (int i = 0; i < Rooms.Rows.Count; i++) < comboBox3.Items.Add(Rooms.Rows[i]["room_type"]); >// loading data to combobox2 using (SqlConnection coon = new SqlConnection(conString)) < SqlCommand cmd = new SqlCommand(); cmd.Connection = coon; cmd.CommandText = "select froom_id from Rooms where reservation_id = 0" SqlDataAdapter adapter = new SqlDataAdapter(cmd); adapter.Fill(Rooms); >for (int i = 0; i

Пробовал делать как-то так, но чтобы данные в комбобоксе с room_id обновились нужно обновить и форму, а после этого сбрасывается значение в комбобоксе с room_type пробовал сохранять его и подставлять после загрузки формы опять, но ничего так и не получилось. Может кто-нибудь подскажет, как это сделать?

cmd.CommandText = "select froom_id from Rooms where reservation_id = 0 AND room_type = " + "'" + comboBox3.Text + "'"; 

Как заполнить ячейку базы данных через Combobox?

Я хочу заполнить ячейку второй таблицы через combobox, выбирая из первой таблицы. Как это можно сделать?

Отслеживать
10.5k 7 7 золотых знаков 25 25 серебряных знаков 41 41 бронзовый знак
задан 18 июл 2017 в 13:16
beginneroot beginneroot
61 1 1 серебряный знак 9 9 бронзовых знаков
Что вы уже сами сделали? Какой код у вас уже есть?
18 июл 2017 в 13:21
можно попробовать привязать к событию изменения содержимого комбобокса
18 июл 2017 в 13:27

Я хочу заполнить ячейку второй таблицы через combobox, выбирая из первой таблицы. что вы имеете ввиду?

18 июл 2017 в 13:43

я имею введу что выбирая место положение заказа по доставке например «аэропорт» из таблицы «location» потом это значение вводилось к таблице «orders» выбирая через форму «combobox»

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *