Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.68/28: Рейтинг темы: голосов - 28, средняя оценка - 4.68
Wild Wolf
54 / 54 / 11
Регистрация: 30.06.2010
Сообщений: 260
1

Не могу изменить строки в DataTable

16.12.2010, 05:52. Просмотров 5421. Ответов 5
Метки нет (Все метки)

Здравствуйте!
Я Вас прошу, помогите с одной проблемой..
Есть DataSet, в котором имеется таблица.

Я добавляю строки в эту таблицу.
C#
1
2
3
4
5
6
7
8
9
10
11
12
// Добавляем новую строку в dataset
                DataRow row = ds_pdb.espc_plan.NewRow();
                row["PLAN_ID"] = counter;
                row["ORDER_PL"] = counter;
                row["STEEL_ID"] = cb_ord_Mark.SelectedValue;
                row["NTD_ID"] = cb_ser_Ntd.SelectedValue;
                row["DIAM_BL"] = cb_ord_Diam.Text;
                row["LEN_BL"] = ud_ser_Length_ser.Value;
                row["COUNT_LD"] = ud_ser_Kol.Value;
                if (chb_ser_Vac.Checked) row["VACUUM"] = 1; else row["VACUUM"] = 0;
                row["DESCRIPT"] = rtb_ser_Descr.Text;
                ds_pdb.espc_plan.Rows.Add(row);
Дальше я пытаюсь у этих вновь добавленных строк поменять значение одного поля и обновить всё это в базе:
C#
1
2
3
4
5
6
7
8
9
 foreach (DataRow row in ds_pdb.espc_plan.GetChanges().Rows)
                        {
                            row["ID_SERIES"] = last_ser;                          
                        }
                        foreach (DataRow row in ds_pdb.espc_plan.GetChanges().Rows)
                        {
                            string str = row["ID_SERIES"].ToString();
                        }
                        Program.form_Main.form_Work.ta_espc_plan.Update(ds_pdb.espc_plan);
Второй цикл foreach я использую просто для проверки в процессе отладки.

Но в базу у меня отправляются данные, которые вносились в момент первого добавления строк, а не модифицированные (с помощью foreach, приведённого во втором фрагменте листинга).

То есть строки добавляются в локальную таблицу, а потом, когда я меняю в них какое то поле, изменения, как я понимаю, просто не фиксируются что ли.. и во втором foreach значение str = "".

Как мне послать в базу добавленные строки с изменениями?

Добавлено через 1 час 2 минуты
И еще вопрос. Можно ли как то сделать, чтоб при каком-то событии (допустим, при нажатии кнопки), мой DataSet закачивал из базы только те строки, которые были изменены или добавлены? Не грузить его полностью, а выхватить из базы только изменения?

Добавлено через 4 часа 52 минуты
Ну не верю я, что никто уж прям не знает!

Добавлено через 15 часов 35 минут
Никто мне не отвечает...
Пожалуйста, help! Помогите! Ведь 37 просмотров уже, но ни одного коммента. Я не верю, что никто не в курсе дела.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.12.2010, 05:52
Ответы с готовыми решениями:

Как изменить ширину столбцов DataGridView, к которому привязан DataTable
Здравствуйте форумчане! Помогите мне решить такой вопрос, как после привязки DataGridView к...

После dataGridView.DataSource = ds.Tables["doc"] не могу изменить цвет фона строки
NpgsqlDataAdapter da = new NpgsqlDataAdapter(select, MainForm.conn); DataSet ds = new...

Индекс строки в DataTable
DataTable abc = new DataTable(); ArrayList names = new ArrayList(); ...

Удаление строки из DataTable
Хочу удалить строку из DataTable. Пишу вот так: filtr = "komu=10 and id_resurs=" +...

Удаление строки из DataTable
Всем привет. есть такое задание: есть таб контрол и есть дейт табле. удаляю 1 таб пейдж то...

5
nio
5970 / 3376 / 335
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
16.12.2010, 05:59 2
Цитата Сообщение от Wild Wolf Посмотреть сообщение
Как мне послать в базу добавленные строки с изменениями?
Если запросы InsertCommand, DeleteCommand, UpdateCommand составлены правильно, то теоритически обновление должно работать Ты уже второй, у кого при нормальном коде не идут обновления БД. Какая студия стоит?

Цитата Сообщение от Wild Wolf Посмотреть сообщение
И еще вопрос. Можно ли как то сделать, чтоб при каком-то событии (допустим, при нажатии кнопки), мой DataSet закачивал из базы только те строки, которые были изменены или добавлены? Не грузить его полностью, а выхватить из базы только изменения?
База не фиксирует состояний изменений данных, это делает только DataSet (и то до вызова метода Update), поэтому такую загрузку реализовать не удастся
1
Wild Wolf
54 / 54 / 11
Регистрация: 30.06.2010
Сообщений: 260
16.12.2010, 06:11  [ТС] 3
VisualStudio 2008.
Обновления то происходят, но только добавляет в базу те данные, которые появляются в таблице после вызова
C#
1
ds_pdb.espc_plan.Rows.Add(row);
Когда же я после этого (не после обновления базы, а после добавления строк в локальный DataSet) произвожу в этих строках изменения
C#
1
row["ID_SERIES"] = last_ser;
, и уже всё это заношу в БД, заносится только то, что попало туда после первого добавления строк в локальный DataSet.
Причем сразу же при после того, как я изменила данные, пытаюсь получить их путём GetChange, он мне возвращает строки без изменений. Соответственно в базу и заносятся не изменённые строки. Так что Insert то работает, Update я не вызываю. Не сохраняются изменения в строках. А статус строк RowState = Added
0
nio
5970 / 3376 / 335
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
16.12.2010, 06:21 4
смотри что ты делаешь:
1) создаешь строку DataRow row
2) заполняешь ее данными
3) добавляешь row в таблицу DataSet
4) изменяешь данные в row (!). Вот твой глюк, ты меняешь данные в строке, а не в таблице dataSet.
Цитата Сообщение от Wild Wolf Посмотреть сообщение
Update я не вызываю
а это чье действие?
Цитата Сообщение от Wild Wolf Посмотреть сообщение
Program.form_Main.form_Work.ta_espc_plan.Update(ds_pdb.espc_plan);
1
Wild Wolf
54 / 54 / 11
Регистрация: 30.06.2010
Сообщений: 260
16.12.2010, 06:46  [ТС] 5
Если б можно было бы 10 спасиб поставить, я бы 10 поставила!!! Надоумил ты меня правильно! Сделала вот так:
C#
1
2
3
4
5
6
7
for (int i = 0; i < ds_pdb.espc_plan.Rows.Count; i++)
        {
              if (ds_pdb.espc_plan.Rows[i].RowState == DataRowState.Added)
               {
                    ds_pdb.espc_plan.Rows[i]["ID_SERIES"] = last_ser;
               }
        }
Работает!

Я по-моему в книжке "Microsoft ADO.NET 2.0 для профессионалов" читала, что при таком вызове Update автоматически вызываются команды Insert для строк со статусом Added, Update для строк со статусом Modified, и Delete для строк со статусом Deleted. Поэтому я и сказала, что Update не вызываю. Я думала, что он мне по этому запросу
C#
1
Program.form_Main.form_Work.ta_espc_plan.Update(ds_pdb.espc_plan)
вызывает Insert. Ну может, я не правильно поняла, не спорю .
0
nio
5970 / 3376 / 335
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
16.12.2010, 07:02 6
Цитата Сообщение от Wild Wolf Посмотреть сообщение
Если б можно было бы 10 спасиб поставить
Есть кнопка "Отзыв", там начисляется репутация в зависимости от репутации нажавшего (т.е. чем больше репутация нажавшего, тем больше очков будет начислено).

Цитата Сообщение от Wild Wolf Посмотреть сообщение
Ну может, я не правильно поняла, не спорю
все абсолютно правильно
Цитата Сообщение от Wild Wolf Посмотреть сообщение
при таком вызове Update автоматически вызываются команды Insert для строк со статусом Added, Update для строк со статусом Modified, и Delete для строк со статусом Deleted.
Но фактически они выполняют одну задачу обновляют данные в БД
При этом у метода Update есть перегрузка, которая выполняет именно запрос из UpdateCommand (это так для общего развития)
1
16.12.2010, 07:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.12.2010, 07:02

Пустые строки в DataTable
Привет всем! Помогите, пожалуйста, решить такую проблему... Подключаюсь к своей базе данных...

Не работает удаление строки из DataTable
Ламерский вопрос, наверное. Несложные команды datatable(k).Rows(i).Remove...

Не отображаются строки DataTable-а в DataGridView-е
Добрый вечер! У меня следующая проблема: есть база данных &quot;Т-217.mdb&quot; состоящая из пяти связанных...


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

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

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