Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 26.10.2014
Сообщений: 171

Обновление dataGridView с использованием UpdateCommand

30.04.2016, 15:31. Показов 4044. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Данные в dataGridView заносятся из БД SQL запросом, который связывает несколько таблиц и создает 2 новых столбца.После изменения данных в dataGridView(изменение данных в желтой ячейке, после который автоматически изменяются данные в красных ячейках ) необходимо сохранить все изменения в БД. Знаю что необходимо сформировать UPDATE с использованием UpdateCommand, но не знаю как это сделать.
Занесение данных в dataGridView
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    string zp = ("SELECT     TOP (100) PERCENT dbo.Cars.Registration_number, dbo.Drivers.Name, dbo.Drivers.Surname, dbo.Brands.Capacity, dbo.Brands.Load_capacity, dbo.Object_work.Number_flights," +
                        "  dbo.Brands.Capacity * dbo.Object_work.Number_flights AS Total_Capacity, dbo.Brands.Load_capacity * dbo.Object_work.Number_flights AS Total_Load_capacity " +
 
                         " FROM         dbo.Brands INNER JOIN" +
                         " dbo.Cars ON dbo.Brands.ID_Brand = dbo.Cars.ID_Brand INNER JOIN" +
                         " dbo.Drivers ON dbo.Cars.ID_Cars = dbo.Drivers.ID_Car INNER JOIN" +
                         " dbo.Waybill ON dbo.Drivers.ID_Driver = dbo.Waybill.ID_Driver INNER JOIN" +
                         " dbo.Object_work ON dbo.Waybill.ID_Waybill = dbo.Object_work.ID_Waybill INNER JOIN" +
                         " dbo.Object ON dbo.Waybill.ID_Object = dbo.Object.ID_Object" +
                         " WHERE     (dbo.Object.Name_Object = '" + obekt + "')");
 
 
                 adapter = new SqlDataAdapter(zp, cn);
                 ds = new DataSet();
                 adapter.Fill(ds);
              dataGridView1.DataSource = ds.Tables[0];
Миниатюры
Обновление dataGridView с использованием UpdateCommand  
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.04.2016, 15:31
Ответы с готовыми решениями:

обновление dataGridView
Помогите, пожалуйста!!! Есть две формы на первой dataGridView, а на второй я добавляю данные. Написала процедуру обновления: ...

Обновление DataGridView
Добрый день! Нужна помощь) Есть таблица в базе данных, которую я отображаю через listbox, но при подгрузке информации на listbox, она...

Обновление DataGridView
Доброго времени суток! Помогите с курсовой. У меня есть 2 формы. 1. Автомобиль 2. Штрафы Есть общий столбец "ИИН...

28
0 / 0 / 0
Регистрация: 26.10.2014
Сообщений: 171
30.04.2016, 17:12  [ТС]
Пытался сделать сохранения в 1 столбце. Все равно не работает.
C#
1
2
3
4
5
6
7
 adapter.UpdateCommand = new SqlCommand("UPDATE Object_work SET Number_flights = @Number_flights WHERE ID_Object_work = @ID_Object_work", cn);
            adapter.UpdateCommand.Parameters.Add("@Number_flights", SqlDbType.Int, 5, "Number_flights");
 
            SqlParameter parameter = adapter.UpdateCommand.Parameters.Add("@ID_Object_work", SqlDbType.Int);
            parameter.SourceColumn = "ID_Object_work";
            parameter.SourceVersion = DataRowVersion.Original;
            adapter.Update(ds.Tables[0]);
0
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
01.05.2016, 20:32
Zyf21, как не работает? Появляется исключение/ошибка? Или мросто в базе ни чего не меняется?
0
0 / 0 / 0
Регистрация: 26.10.2014
Сообщений: 171
01.05.2016, 20:55  [ТС]
kodv, Не обновляет. А если попробывать добавить по очереди что-то в любые 2 ячейки столбца Number_flights то выдает ошибку.
Миниатюры
Обновление dataGridView с использованием UpdateCommand  
0
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
02.05.2016, 05:47
Zyf21, попробуйте вызывать EndEdit для DataTable перед тем, как ее пихать в Update. Похоже на то, что у вас метод Update не видит измененных строк, поэтому не вызычает UpdateCommand.Если есть доступ к SQL Server Profiler, то посмотрите через него, какие команды реально на БД выполняются.
0
0 / 0 / 0
Регистрация: 26.10.2014
Сообщений: 171
02.05.2016, 11:58  [ТС]
kodv, мне получается нужно переделать все с использованием DataTable? Я ведь использую Dataset. И как вызывать EndEdit? В msdn я не нашёл понятных мне примеров его применения.
0
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
02.05.2016, 13:13
Zyf21, нет. Вам нужно найти статью про ado.net и почитать. DataSet - это надстройка над коллекцией DataTable'ов. Это и многое другое вы обязаны знать, если используете ado.net.
1
0 / 0 / 0
Регистрация: 26.10.2014
Сообщений: 171
02.05.2016, 14:33  [ТС]
kodv, я сделал другой пример и попробывал там применить EndEdit.Но не получается. Там есть только EndEnit.Может нужно что-то через using подключить? В статье что нашёл ничего про это не сказано. https://msdn.microsoft.com/ru-... .110).aspx
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
private void button1_Click(object sender, EventArgs e)
        {
             string connectionString = @"Server=10.10.10.34; Database=14-IT-1-Brigadin; User Id=Brigadin; Password=wfr12390 ;";
             SqlConnection connection = new SqlConnection(connectionString);
             connection.Open();
             adapter = new SqlDataAdapter("SELECT * FROM Persons", connection);
             tbl = new DataTable();
             adapter.Fill(tbl);       
             dataGridView1.DataSource = tbl;
             tbl.EndInit();
            tbl.EndIdit(); // Ошибка
             
            
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            SqlCommandBuilder cmdBuilder = new SqlCommandBuilder(adapter);
            adapter.Update(tbl);
        }
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
04.05.2016, 15:58
Итак, в последнем посте происходит полная ересь:
1. SqlCommandBuilder работает на основании запроса выборки, т.е. он должен быть связан с адаптером, уже в момент выполнения Select
2. Для того, чтобы CommandBuilder сработал, обязательны следующие условия: запрос должен быть только к одной таблице, эта таблица должна иметь первичный ключ, который участвует в запросе Select (т.е. для запроса первого поста это точно не сработает)

Цитата Сообщение от Zyf21 Посмотреть сообщение
И как вызывать EndEdit?
это метод dgv https://msdn.microsoft.com/ru-... .110).aspx Вызывать следует перед выполнением метода update адаптера. Для проверки в нём ли дело можно просто перед сохранением переставить курсор в другую строку, тогда редактирование ячейки будет завершено автоматически.

Цитата Сообщение от Zyf21 Посмотреть сообщение
Пытался сделать сохранения в 1 столбце.
Следует проверить, чем завершается выполнение метода Update для адаптера. Если мне не изменяет память, он должен вернуть количество затронутых строк.
0
0 / 0 / 0
Регистрация: 26.10.2014
Сообщений: 171
04.05.2016, 16:34  [ТС]
nio, получается дело не в EndEdit. Я его вызвал, но всё осталось без изменений.А про сохранения в 1 столбце вы наверное меня не поняли. Я вывел в dgv из всего запроса только 1 столбец, изменял в какой-нибудь 1 ячейке данные и пытался сохранить изменения. А возможно ли в этом случае применить вот это решение https://msdn.microsoft.com/ru-... 84432.aspx ?
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
06.05.2016, 13:45
Цитата Сообщение от Zyf21 Посмотреть сообщение
Я вывел в dgv из всего запроса только 1 столбец
в первом посте я вижу запрос с кучей JOINов, CommandBuilder в этом случае не сработает

Добавлено через 1 минуту
Цитата Сообщение от Zyf21 Посмотреть сообщение
А возможно ли в этом случае применить вот это решение
нет смысла, т.к. данные меняются только в одной таблице
1
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
06.05.2016, 13:55
Цитата Сообщение от Zyf21 Посмотреть сообщение
Пытался сделать сохранения в 1 столбце. Все равно не работает.
Цитата Сообщение от Zyf21 Посмотреть сообщение
UPDATE Object_work SET Number_flights = @Number_flights WHERE ID_Object_work = @ID_Object_work"
В запросе 2 параметра: @Number_flights и @ID_Object_work. А вы добавляете только 1 в adapter.
1
0 / 0 / 0
Регистрация: 26.10.2014
Сообщений: 171
06.05.2016, 15:41  [ТС]
nio, мне хоть как-то обновить. Любым способом, так как уже неделю мучаюсь с этой проблемой.Получается можно изменить с помощью последнее решение? Там после ввода в столбце одной таблицы должны автоматически происходить изменения в других столицах другой таблицы.

Добавлено через 9 минут
Igr_ok, а второй параметр же это ключевое поле. Его же вроде не нужно добавлять.
0
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
06.05.2016, 16:27
Цитата Сообщение от Zyf21 Посмотреть сообщение
Igr_ok, а второй параметр же это ключевое поле. Его же вроде не нужно добавлять.
Его не нужно изменять. Это немножко разные вещи.
1
0 / 0 / 0
Регистрация: 26.10.2014
Сообщений: 171
06.05.2016, 17:14  [ТС]
Igr_ok, ну я его не изменяю. Я делал по примеру https://msdn.microsoft.com/ru-... .110).aspx . Там с ключевым поле так делали.
0
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
06.05.2016, 18:01
Цитата Сообщение от Zyf21 Посмотреть сообщение
Я делал по примеру
Так посмотрите пример еще раз и убедитесь, что нужно добавить еще один параметр.
1
0 / 0 / 0
Регистрация: 26.10.2014
Сообщений: 171
06.05.2016, 20:27  [ТС]
Igr_ok, извините пожалуйста, но я до конца не понял что нужно было добавить.Нужно было добавить параметр ID_Object_work? Я добавил, но все равно выдает ошибку.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 adapter.UpdateCommand = new SqlCommand("UPDATE Object_work SET @ID_Object_work=ID_Object_work, Number_flights = @Number_flights WHERE ID_Object_work = @ID_Object_work", cn);
            adapter.UpdateCommand.Parameters.Add("@Number_flights", SqlDbType.Int, 5, "Number_flights");
            adapter.UpdateCommand.Parameters.Add("@ID_Object_work", SqlDbType.Int, 5, "ID_Object_work");
            SqlParameter parameter = adapter.UpdateCommand.Parameters.Add("@ID_Object_work", SqlDbType.Int);
 
            parameter.SourceColumn = "ID_Object_work";
            parameter.SourceVersion = DataRowVersion.Original;
            dataGridView1.EndEdit();
            try
            {
               
                adapter.Update(ds.Tables[0]);
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
0
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
06.05.2016, 20:49
Цитата Сообщение от Zyf21 Посмотреть сообщение
Я добавил, но все равно выдает ошибку.
Теперь у вас 3 параметра + ошибка в запросе. Я понимаю, что вы скопировали образец, но код надо писать осмысленно. Вам не нужно обновлять ID_Object_work.
C#
1
2
3
4
5
6
7
8
9
10
adapter.UpdateCommand = new SqlCommand("UPDATE Object_work SET Number_flights = @Number_flights WHERE ID_Object_work = @ID_Object_work", cn);
            adapter.UpdateCommand.Parameters.Add("@Number_flights", SqlDbType.Int);
            adapter.UpdateCommand.Parameters.Add("@ID_Object_work", SqlDbType.Int);
            dataGridView1.EndEdit();
            try
            {
               
                adapter.Update(ds.Tables[0]);
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
1
0 / 0 / 0
Регистрация: 26.10.2014
Сообщений: 171
06.05.2016, 21:19  [ТС]
Igr_ok, выдает ту же самую ошибку что в самом начале. Наверное нужно использовать какой-нибудь другой способ.Или скорее всего есть ошибки в другом месте. Спасибо за помощь.
0
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
07.05.2016, 09:26
Цитата Сообщение от Zyf21 Посмотреть сообщение
выдает ту же самую ошибку что в самом начале
В результате запроса, который выводится потом в грид, присутствует столбец ID_Object_work? Если нет, то его нужно добавить в запрос.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.05.2016, 09:26
Помогаю со студенческими работами здесь

Обновление dataGridView
Как првильна обновить dataGridView1. зчитывую з ХМЛ таким кодом XmlDataDocument xmlDatadoc = new XmlDataDocument(); ...

Обновление DataGridView
Доброго времени суток. Дело в том, что у меня не получается обновить DataGridView из другой формы. Начну с того, что у меня есть 2 формы....

DataGridView и обновление БД
Вопрос конечно уже поднимался, но тем не менее прошу помощи, так как до конца не могу разобраться. Есть две формы - на одной...

Обновление dataGridView
Добрый день! Подскажите пожалуйста как реализовать обновление dataGridView (чтобы выводились все записи БД, в том числе и только что...

DataGridView и обновление бд
Доброго времени суток. Я наверное повторяюсь... но много тем читал про то как сохранить изменения в бд после изменений в dataGridView. ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru