Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Изменение данных 
:(
    Опции темы
mal
Дата 9.7.2007, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 28.5.2007

Репутация: нет
Всего: нет



С добавлением данных разобрался.
Код

                DataRow newAbons = ds.Tables["abons"].NewRow();
                newAbons["abons_id"] = ID;
                newAbons["fam"] = ab_fam.Text;
                newAbons["name"] = ab_name.Text;
                newAbons["otch"] = ab_otch.Text;
                newAbons["div_id"] = division.SelectedValue;

                ds.Tables["abons"].Rows.Add(newAbons);
                daAbons.Update(ds.Tables["abons"]);


А как быть если необходимо изменить данные в таблице abons, зная значение колонки abons_id?

p.s.   abons_id - первичный ключ.

Добавлено через 13 минут и 36 секунд
Наверно, так
Код

DataRow updRow = ds.Tables["abons"].Rows[i];
updRow ["fam"] = ab_fam.Text;
updRow ["name"] = ab_name.Text;
updRow ["otch"] = ab_otch.Text;
updRow ["div_id"] = division.SelectedValue;


но i - номер строки постоянно меняется.

Это сообщение отредактировал(а) mal - 9.7.2007, 11:11
PM   Вверх
emmanuil
Дата 10.7.2007, 08:04 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 380
Регистрация: 9.1.2007

Репутация: 1
Всего: 3



можно так
Код

ds.Tables["abons"].Rows[i]["fam"] = ab_fam.Text;
ds.Tables["abons"].Rows[i]["name"] = ab_name.Text;
ds.Tables["abons"].Rows[i]["otch"] = ab_otch.Text;
ds.Tables["abons"].Rows[i]["div_id"] = division.SelectedValue;
daAbons.Update(ds.Tables["abons"].GetChanges(DataRowState.Modified));


Добавлено через 8 минут и 44 секунды
Код

            for (int i = 0; i < dt.Rows.Count; i++)
            {
                if (dt.Rows[i]["abons_id "] == some_value)
                {
                    ds.Tables["abons"].Rows[i]["fam"] = ab_fam.Text;
                    ds.Tables["abons"].Rows[i]["name"] = ab_name.Text;
                    ds.Tables["abons"].Rows[i]["otch"] = ab_otch.Text;
                    ds.Tables["abons"].Rows[i]["div_id"] = division.SelectedValue;
                    // если необходимо, то break;
                }
            }
            daAbons.Update(ds.Tables["abons"].GetChanges(DataRowState.Modified));

Вот так например. Ищем значение и обновляем.
Но лучше самому через запрос это сделать (мое мнение). Если интересует, скажи.

Добавлено через 9 минут и 40 секунд
dt - это ds.Tables["abons"], по запарке забыл поменять
PM MAIL   Вверх
mal
Дата 10.7.2007, 08:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 28.5.2007

Репутация: нет
Всего: нет



Большое спасибо за развернутый ответ. smile  Разобрался.
А как быть если при открытии формы я пишу
Код

ab_fam.DataBindings.Add("Text", ds.Tables["abons"], "fam");
 
При этом ds.Tables["abons"].GetChanges(DataRowState.Modified) возвращает null.
PM   Вверх
mal
Дата 10.7.2007, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 28.5.2007

Репутация: нет
Всего: нет



Код

                ds.Tables["abons"].Rows[0].EndEdit();
                daAbons.Update(ds.Tables["abons"]);


Так работает smile 

Это сообщение отредактировал(а) mal - 10.7.2007, 09:28
PM   Вверх
emmanuil
Дата 10.7.2007, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 380
Регистрация: 9.1.2007

Репутация: 1
Всего: 3



DataTable.GetChanges() - возвращает таблицу с изменными строками
DataRowState - это как раз тип изменения - обновление, дабавление...
Если DataRowState не указать, то DataTable.GetChanges() вернет все изменения.
Цитата(mal @  10.7.2007,  06:59 Найти цитируемый пост)
А как быть если при открытии формы я пишу
код C#
1: ab_fam.DataBindings.Add("Text", ds.Tables["abons"], "fam");
 
При этом ds.Tables["abons"].GetChanges(DataRowState.Modified) возвращает null. 

null потому что данные только загрузились и они без изменений.
а на счет этого - ab_fam.DataBindings.Add("Text", ds.Tables["abons"], "fam"); - то пожалуйста. Тут ты просто добавляешь связь с набором данных компоненту.

Добавлено через 8 минут и 59 секунд
а без ds.Tables["abons"].Rows[0].EndEdit(); не работает?
Цитата(mal @  10.7.2007,  07:25 Найти цитируемый пост)
код C#
1:
2:

                ds.Tables["abons"].Rows[0].EndEdit();
                daAbons.Update(ds.Tables["abons"]);

Так работает  


PM MAIL   Вверх
tol05
Дата 10.7.2007, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 11
Всего: 170



просто нужно писать 
Код

daAbons.Update(ds.Tables["abons"]); 

или даже
Код

daAbons.Update(ds); 
 (если у тебя только одна таблица. Если бы было несколько и ты хотел бы проапдейтить только одну, тогда да, нужно указать какую апдейтить). И все!

GetChanges(DataRowState.Modified) и вообще все DataRowState.Modified, DataRowState.Added, DataRowState.Deleted при работе с DataAdapter-ом только путают. состояние строк нужно только для того, чтобы ты, в любой момент времени, внутри своей программы смого посмотреть, что это за строка, изменилась ли она, помечена ли уже на удаление или нет и т.д. А адаптер прекрасно эти состояния умеет читать сам и для каждой строки сам генерирует нужную команду.

все это хорошо описани в вильямсоновской книге "Microsoft ADO.NET 2.0 для профессионалов.2006"  на странице 291 smile


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
emmanuil
Дата 10.7.2007, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 380
Регистрация: 9.1.2007

Репутация: 1
Всего: 3



Если нужно только обновить, то без GetChanges(DataRowState.Modified) не обойтись. Иногда бывает, нужно провести только обновления, а потом после разных манипуляций добавление (к примеру). Если нужно просто провести все изменения в базу, то согласен, это не к чему.
Но вопрос был как обновить.
Цитата(mal @  9.7.2007,  09:07 Найти цитируемый пост)
А как быть если необходимо изменить данные в таблице abons, зная значение колонки abons_id?

PM MAIL   Вверх
mal
Дата 10.7.2007, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 28.5.2007

Репутация: нет
Всего: нет



Код
Код

daAbons.Update(ds.Tables["abons"]); 

не работает, если добавить связь ab_fam.DataBindings.Add("Text", ds.Tables["abons"], "fam");

А такой у меня работает.
Код

ds.Tables["abons"].Rows[0].EndEdit();
daAbons.Update(ds.Tables["abons"]);

Нашел на форуме

p.s. Спасибо за интерес к теме!
PM   Вверх
0rac1e
Дата 21.7.2007, 13:03 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 16.2.2007

Репутация: нет
Всего: нет



А почему нельзя ?

Код

                int abons_id ...

                DataRow newAbons = ds.Tables["abons"].Find(abons_id);
                newAbons["fam"] = ab_fam.Text;
                newAbons["name"] = ab_name.Text;
                newAbons["otch"] = ab_otch.Text;
                newAbons["div_id"] = division.SelectedValue;
                daAbons.Update(ds.Tables["abons"]);

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0745 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.