Форум программистов, компьютерный форум, киберфорум
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 17.04.2013
Сообщений: 14
1

Update БД из DataGridviewComboBoxColumn

17.04.2013, 14:25. Показов 2190. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Требуется обновить грид по нажатию кнопки. Дело в том, что в гриде имеются comboboxcolumn, с обновлением которых возникает проблема.

Заполнение грида
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
        public void GridPrepod()
        {
            try
            {
                string selectPrepod = String.Format(@"SELECT Преподаватель.ID_преподавателя,  Преподаватель.Фамилия, y1.ID_степени, y2.ID_степени
 FROM Преподаватель join Учёная_степень y1
     on Преподаватель.Учёная_степень = y1.ID_степени 
     join Учёная_степень y2 on Преподаватель.Учёная_степень_2 = y2.ID_степени");
                
                da = new SqlDataAdapter(selectPrepod, cnn);
                dt = new DataTable();
 
                da.Fill(dt);
                dgvPrepod.DataSource = dt;
 
                dgvPrepod.Columns["ID_преподавателя"].Visible = false;
                dgvPrepod.Columns["ID_степени"].Visible = false;
 
                //Комбо Учёная степень
                string SelStep1 = String.Format(@"Select ID_степени, Наименование From Учёная_степень");
                daStep1 = new SqlDataAdapter(SelStep1, cnn);
                dtStep1 = new DataTable();
                daStep1.Fill(dtStep1);
                DataGridViewComboBoxColumn cBstep1 = new DataGridViewComboBoxColumn();
 
                cBstep1.DataSource = dtStep1;
                cBstep1.ValueMember = "ID_степени";
                cBstep1.DisplayMember = "Наименование";
                cBstep1.DataPropertyName = "ID_степени";
                cBstep1.HeaderText = "Учёная степень";
 
                dgvPrepod.Columns.Add(cBstep1);
 
                //Комбо Учёная степень 2
                string SelStep2 = String.Format(@"Select ID_степени, Наименование From Учёная_степень");
                daStep2 = new SqlDataAdapter(SelStep2, cnn);
                dtStep2 = new DataTable();
                daStep2.Fill(dtStep2);
                DataGridViewComboBoxColumn cBstep2 = new DataGridViewComboBoxColumn();
 
                cBstep2.DataSource = dtStep2;
                cBstep2.ValueMember = "ID_степени";
                cBstep2.DisplayMember = "Наименование";
                cBstep2.DataPropertyName = "ID_степени1";
                cBstep2.HeaderText = "Учёная степень 2";
 
                dgvPrepod.Columns.Add(cBstep2);
 
             catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }

Обновление грида

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
private void btnChange_Click(object sender, EventArgs e)
        {
            try
            {
                SqlCommand command = new SqlCommand(@"Update Преподаватель 
                Set Фамилия = @family, Имя = @name, Отчество=@otch, Учёное_звание=@zvan, 
                Учёная_степень=@step, Учёная_степень_2=@step2, Должность=@dolzh,                   Должность_по_совместительству=@dolzh2,  Шт_ед=@shtat, Контактный_телефон=@tel
where ID_преподавателя=@id", cnn);
 
                SqlParameter parametr = null;
 
                parametr = new SqlParameter("@family", SqlDbType.VarChar, 50);
                parametr.SourceColumn = "Фамилия";
                command.Parameters.Add(parametr);
 
                command.Parameters.Add("@step", SqlDbType.Int, 4);
                command.Parameters["@step"].Value = dgvPrepod.CurrentRow.Cells[4].Value;
 
                command.Parameters.Add("@step2", SqlDbType.Int, 4);
                command.Parameters["@step2"].Value = dgvPrepod.CurrentRow.Cells[5].Value;
                
                command.Connection = cnn;
                da.UpdateCommand = command;
                da.Update(dt);
 
             catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
 
            finally
            {
                cnn.Close();
            }
Сделал пока dgvPrepod.CurrentRow.Cells[11].Value;
Как выбрать строку, где произошло изменение и именно оттуда взять значение для update?

Добавлено через 1 час 56 минут
Прошу прощения, криво скопировал код обновления:
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
35
36
37
38
private void btnChange_Click(object sender, EventArgs e)
        {
            try
            {
                SqlCommand command = new SqlCommand(@"Update Преподаватель 
                Set Фамилия = @family,  Учёная_степень=@step, Учёная_степень_2=@step2
where ID_преподавателя=@id", cnn);
 
                SqlParameter parametr = null;
 
                parametr = new SqlParameter("@family", SqlDbType.VarChar, 50);
                parametr.SourceColumn = "Фамилия";
                command.Parameters.Add(parametr);
 
                command.Parameters.Add("@step", SqlDbType.Int, 4);
                command.Parameters["@step"].Value = dgvPrepod.CurrentRow.Cells[4].Value;
 
                command.Parameters.Add("@step2", SqlDbType.Int, 4);
                command.Parameters["@step2"].Value = dgvPrepod.CurrentRow.Cells[5].Value;
 
                parametr = new SqlParameter("@id", SqlDbType.Int, 4);
                parametr.SourceColumn = "ID_преподавателя";
 
                command.Parameters.Add(parametr);                
 
                command.Connection = cnn;
                da.UpdateCommand = command;
                da.Update(dt);
 
             catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
 
            finally
            {
                cnn.Close();
            }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.04.2013, 14:25
Ответы с готовыми решениями:

Не получается сделать Update (Update requires a valid InsertCommand)
Не получается сделать Update выдаёт ошибку, что делаю не так? В таблице только одно поле, оно...

DataGrid update ПРОБЛЕМА: Key column information is insufficient or incorect. Too many rows were affected by update
Привет всем ! В Вижуал Басик6 на форме имею ДатаГрид с информацией из Аксцессс 2000. Соединение...

Дедлоки между update limit N и update по primary key
Добрый день! Столкнулся с дедлоками, хотелось бы послушать опытных товарищей как с этим быть. ...

DataGridViewComboBoxColumn
Доброго времени суток. Не давно начал изучать программирование, и решил попробовать написать...

4
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
17.04.2013, 15:22 2
Что вам мешает задать SourceColumn для всех параметров, а не для половины и забыть про "ручной" поиск строк, в которые были внесены изменения? За вас это сделает DataAdapter.Update.
PS: Чем ваш запрос на выборку данных лучше, чем следующий?
T-SQL
1
2
SELECT ID_преподавателя, Фамилия, Ученая_степень, Ученая_степень_2
    FROM Преподаватель
Вся информация, которые вы выбираете в DataTable, содержится в одной таблице. Зачем вам к ней джонить еще две?
0
0 / 0 / 0
Регистрация: 17.04.2013
Сообщений: 14
17.04.2013, 16:13  [ТС] 3
Цитата Сообщение от kodv Посмотреть сообщение
Что вам мешает задать SourceColumn для всех параметров, а не для половины
ругается, "Параметризованный запрос ожидает параметр "@step", который не был указан"

Цитата Сообщение от kodv Посмотреть сообщение
Вся информация, которые вы выбираете в DataTable, содержится в одной таблице. Зачем вам к ней джонить еще две?
По полям Ученая_степень, Ученая_степень_2 таблица Преподаватель связана с таблицей Учёная_степень, из которой они берут разные значения
0
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
17.04.2013, 16:23 4
Цитата Сообщение от SupNatRus Посмотреть сообщение
ругается, "Параметризованный запрос ожидает параметр "@step", который не был указан"
Вы хоть поняли, что я спросил? Он так ругается, когда уже выполняется метод Update. А я говорил про свойство SourceColumn. Есть ваш кусок кода:
C#
1
2
                parametr = new SqlParameter("@id", SqlDbType.Int, 4);
                parametr.SourceColumn = "ID_преподавателя";
. Что вам мешает аналогично задать и остальные параметры?
C#
1
2
3
4
                parametr = new SqlParameter("@step", SqlDbType.Int, 4);
                parametr.SourceColumn = "Ученая_степень"; 
                parametr = new SqlParameter("@step2", SqlDbType.Int, 4);
                parametr.SourceColumn = "Ученая_степень_2";
Цитата Сообщение от SupNatRus Посмотреть сообщение
По полям Ученая_степень, Ученая_степень_2 таблица Преподаватель связана с таблицей Учёная_степень, из которой они берут разные значения
В том запросе, который у вас написан здесь, все значения содержатся в одной таблице.
0
0 / 0 / 0
Регистрация: 17.04.2013
Сообщений: 14
17.04.2013, 16:37  [ТС] 5
Цитата Сообщение от kodv Посмотреть сообщение
Что вам мешает аналогично задать и остальные параметры?
так вот именно когда я задаю так параметры для столбцов combobox, он и ругается



Цитата Сообщение от kodv Посмотреть сообщение
В том запросе, который у вас написан здесь, все значения содержатся в одной таблице.
FROM Преподаватель join Учёная_степень y1 ... join Учёная_степень y2
а в таблице преподаватель поля Учёная_степень, Учёная_степень2 - id для связи со второй таблицей
0
17.04.2013, 16:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.04.2013, 16:37
Помогаю со студенческими работами здесь

Использование DataGridViewComboBoxColumn
Добрый день! Помогите, пожалуйста решить проблему. Надо в DataGridView для всех ячеек сделать...

Работа с DataGridViewComboBoxColumn
Всем здравствуйте. помогите пожалуйста разобраться. Есть 4 колонки 2 из них...

Заполнение DataGridViewComboBoxColumn из БД
Есть combobox и datagridview на форме. combobox заполняю из БД NpgsqlConnection conn = new...

DataGridViewComboBoxColumn из базы
Добрый день! есть ли у кого-то пример кода использования DataGridViewComboBoxColumn Мне надо что...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru