Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/12: Рейтинг темы: голосов - 12, средняя оценка - 4.83
Dbogdan27
10 / 10 / 1
Регистрация: 10.02.2013
Сообщений: 87
1

ComboBox + BindingSource

14.11.2013, 12:35. Просмотров 2245. Ответов 5
Метки нет (Все метки)

Есть справочная таблица hospital_branches (Branch_id, Branch_title) и оперативная где поле Branch_id фигугрирует. Я хотел чтобы ComboBox "смотрел" на справочную таблицу(чтобы пользователь мог выбрать Branch_title) и вот при выборе всё записывалось в оперативную таблицу...
Т.е смотрит на справочную а записывает в оперативную. Решил использовать класс BindingSource.
Получилось так :
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
  
// Заполняю таблицу "Отделения больницы"
cmd = new MySqlCommand("SELECT Branch_id, Branch_title FROM hospital_branches ORDER BY Branch_title", con);
hospitalBranchesDA = new MySqlDataAdapter(cmd);
hospitalBranchesDA.Fill(medOrdersDS, "hospital_branches");
 
...
 
// Заполняю таблицу "Заказы мед. препаратов"
cmd = new MySqlCommand("SELECT Order_id, Branch_id, Order_date, Quatr FROM medications_orders", con);
medicationOrdersDA = new MySqlDataAdapter(cmd);
medicationOrdersDA.Fill(medOrdersDS, "medications_orders");
medicationOrdersCB = new MySqlCommandBuilder(medicationOrdersDA);
medicationOrdersBS = new BindingSource(medOrdersDS, "medications_orders");   
 
...
 
// Забиндить отделение больницы
hospitalBranchesComboBox.DataSource = medOrdersDS.Tables["hospital_branches"];
hospitalBranchesComboBox.ValueMember = "Branch_id";
hospitalBranchesComboBox.DisplayMember = "Branch_title";
hospitalBranchesComboBox.DataBindings.Add(new Binding("SelectedValue", medicationOrdersBS, "Branch_id"));
 
// Забиндить квартал
quatrComboBox.DataBindings.Add(new Binding("SelectedValue", medicationOrdersBS, "Quatr"));
 
// Забиндить год
yearComboBox.DataBindings.Add(new Binding("SelectedValue", medicationOrdersBS, "Order_date"));
 
...
 
medicationOrdersBS.AddNew();
medicationOrdersBS.EndEdit();
medicationOrdersDA.Update(medOrdersDS, "medications_orders");
В последней строчке кода выскакивает исключение: "Field 'Branch_id' doesn't have a default value"
Заранее спасибо за помощь!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.11.2013, 12:35
Ответы с готовыми решениями:

Как можно реализовать выбор bindingSource для DataGridView из элемента ComboBox?
привет всем!! Подскажите как можно реализовать выбор bindingSource для...

Фильтры BindingSource
Сделал фильтр: " Like '%Value%'", и это рабочий код. Но работает он только на...

BindingSource и фильтр по id
Здравствуйте, есть ключевая таблица, в которую идут все данные, вид отображения...

Фильтрация BindingSource
Подскажите, у меня на форме есть комбобоксы. С помощью BindingSource.Filter я...

BindingSource, DataSource
Добавляю BindingSource в конструкторе, Выбираю DataSource, когда добавляю...

5
kodv
1423 / 1097 / 344
Регистрация: 11.04.2011
Сообщений: 2,606
Завершенные тесты: 1
15.11.2013, 07:17 2
Цитата Сообщение от Dbogdan27 Посмотреть сообщение
В последней строчке кода выскакивает исключение: "Field 'Branch_id' doesn't have a default value"
А чего вы ожидали, если вы пытаетесь на базе в поле Branch_id, которое, скорее всего, имеет ограничение NOT NULL, запихать значение NULL? NULL в него запихать нельзя, значение по-умолчанию, которое вставляется в поле в таких случаях, отсутствует. Вот у вас СУБД и ругается. При этом на вполне понятном английском языке.
0
Dbogdan27
10 / 10 / 1
Регистрация: 10.02.2013
Сообщений: 87
15.11.2013, 10:55  [ТС] 3
Цитата Сообщение от kodv Посмотреть сообщение
А чего вы ожидали, если вы пытаетесь на базе в поле Branch_id, которое, скорее всего, имеет ограничение NOT NULL, запихать значение NULL? NULL в него запихать нельзя, значение по-умолчанию, которое вставляется в поле в таких случаях, отсутствует. Вот у вас СУБД и ругается. При этом на вполне понятном английском языке.
Ну там оно само по себе не пустое... В этом combobox - е значение.
0
kodv
1423 / 1097 / 344
Регистрация: 11.04.2011
Сообщений: 2,606
Завершенные тесты: 1
15.11.2013, 11:03 4
Dbogdan27, Почитайте про то, как работает DataBinding. Значение в DataTable изменяется при возникновении события изменения свойства, к которому привязано поле DataTable. В вашем случае данное событие не возникнет, поэтому поле в таблице останется пустым. инициализируйте поле явно.
1
Dbogdan27
10 / 10 / 1
Регистрация: 10.02.2013
Сообщений: 87
15.11.2013, 11:05  [ТС] 5
Цитата Сообщение от kodv Посмотреть сообщение
Dbogdan27, Почитайте про то, как работает DataBinding. Значение в DataTable изменяется при возникновении события изменения свойства, к которому привязано поле DataTable. В вашем случае данное событие не возникнет, поэтому поле в таблице останется пустым. инициализируйте поле явно.
Огромное спасибо за помощь, пойду пробовать
0
Learx
1046 / 853 / 194
Регистрация: 31.03.2010
Сообщений: 2,490
15.11.2013, 17:31 6
C#
1
2
3
4
5
6
7
DataRow nr = medOrdersDS.Tables["medications_orders"].NewRow();
nr["Branch_id"] = hospitalBranchesComboBox.SelectedValue;
//заполняем остальные столбцы
 
medOrdersDS.Tables["medications_orders"].Rows.Add(nr);//добавляем новую строку в таблицу
medicationOrdersDA.Update(medOrdersDS, "medications_orders"); //записываем в БД
medicationOrdersBS.ResetBindining(false); //обновляем данные на форме
0
15.11.2013, 17:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.11.2013, 17:31

Работа с BindingSource
Здравствуйте, помогите плз с программкой. Хочу сделать форму входа в программу....

Не работает Filter в BindingSource
Помогите разобраться. Нужно заставить BindingSource отображать только...

DataCridView и BindingSource.Filter
Есть DataCridView с набором данных. В нем применяется фильтрация...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru