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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обновление записей DataGridView, DataGridView 
:(
    Опции темы
albert21
Дата 20.2.2006, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Подскажите плиз!

Код

AdapterDisk.Fill(DiskotekaDS, "Disk");
dataGridDisk.DataSource = DiskotekaDS.Tables["Disk"];

....

for (int i = 0; i <= dataGridDisk.SelectedRows.Count - 1; ++i)
{
  AdapterDisk.DeleteCommand.CommandType=System.Data.CommandType.Text;
  AdapterDisk.DeleteCommand.Connection = oleDbConnection;
  AdapterDisk.DeleteCommand.CommandText = "DELETE FROM Disk WHERE ID=" + dataGridDisk. SelectedRows[i].Cells["ID"].Value.ToString();
  AdapterDisk.DeleteCommand.ExecuteNonQuery();
}

....

AdapterDisk.Update(DiskotekaDS, "Disk");
DiskotekaDS.Tables["Disk"].RejectChanges();



Проблема: Из базы данных запись удаляется, а из Grid`а нет! smile
Как обновить ГРИД?
--------------------
http://www.certifications.ru/publicresults.php?tu_id=45939
PM MAIL   Вверх
Exception
Дата 21.2.2006, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



DataGridView.Refresh()?
PM   Вверх
albert21
Дата 21.2.2006, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата

DataGridView.Refresh()


Это я пробовал! Не помогает!
--------------------
http://www.certifications.ru/publicresults.php?tu_id=45939
PM MAIL   Вверх
arilou
Дата 23.2.2006, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

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



albert21, Exception, и как же вы хотите, чтобы датасет синхронизировал изменения сам? Надо удалить row из датасета, и вызвать DataAdapter.Update(). Есессно, необходимо чтобы в адаптере присутствовала эта самая DeleteCommand.


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
mr.DUDA
Дата 23.2.2006, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



Код
AdapterDisk.Update(DiskotekaDS, "Disk");
DiskotekaDS.Tables["Disk"].RejectChanges();

Последняя строка вызывает сомнения.
Надо бы её убрать, либо заменить на AcceptChanges().


--------------------
user posted image
PM MAIL WWW   Вверх
albert21
Дата 23.2.2006, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата

Последняя строка вызывает сомнения.
Надо бы её убрать, либо заменить на AcceptChanges().


Пробовал, ситуация без изменений!
Вообще не понимаю в чём проблема! В ASP.NET у меня возникал подобный вопрос, но его удалось решить так:
Код

            adapter_otdel.Update(ds,"Отдел");
            ds.Tables["Отдел"].RejectChanges();            
            this.DataGrid1.DataBind();


Но там использовался просто грид! В Windows приложении я не знаю как получить набор выделенных строк, как обращаться к полям выделенной строки?
--------------------
http://www.certifications.ru/publicresults.php?tu_id=45939
PM MAIL   Вверх
mr.DUDA
Дата 23.2.2006, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



В WinForms-приложении любой контрол незамедлительно реагирует на изменения в источнике данных, к которому он привязан. Единственным подводным камнем тут может быть необходимость вызвать у контрола BeginUpdate до обновления и EndUpdate после обновления источника данных...


--------------------
user posted image
PM MAIL WWW   Вверх
albert21
Дата 1.3.2006, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Всё с самого начала логично! Я произвожу изменения в самой базе данных (напрямую), а не в DataSet! Поэтому AdapterDisk.Update(DiskotekaDS, "Disk"); ни чего не делает, так как DataSet и не изменился!

Я сделал так:
Код

                private System.Data.OleDb.OleDbCommandBuilder comand_builder;
                this.comand_builder = new System.Data.OleDb.OleDbCommandBuilder(AdapterDisk);
                ....
                for (int j = 0; j < dataGridDisk.SelectedRows.Count; j++)
                {
                   DiskotekaDS.Tables["Disk"].Rows[dataGridDisk.SelectedCells[j].RowIndex].Delete();
                }


Ну а потом: AdapterDisk.Update(DiskotekaDS, "Disk");
получаю ошибку "Не был задан текс команды для командного объекта"

Подскажите, как исправить?
--------------------
http://www.certifications.ru/publicresults.php?tu_id=45939
PM MAIL   Вверх
arilou
Дата 1.3.2006, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

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



albert21, заполнить DataAdapter.DeleteCommand.

Цитата(albert21 @ 1.3.2006, 12:23 Найти цитируемый пост)
ни чего не делает, так как DataSet и не изменился!


Ты что, не читал мой пост?

Цитата(arilou @ 23.2.2006, 13:20 Найти цитируемый пост)
Надо удалить row из датасета, и вызвать DataAdapter.Update().





--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
albert21
Дата 1.3.2006, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



arilou, извиняюсь действительно не читал, упустил из виду почему-то!
Цитата

albert21, заполнить DataAdapter.DeleteCommand.


чем его заполнить? Ведь запись удаляется в зависимости от значения первичного ключа!
DELETE FROM Disk WHERE ID=... ???
--------------------
http://www.certifications.ru/publicresults.php?tu_id=45939
PM MAIL   Вверх
albert21
Дата 1.3.2006, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



И вообще, System.Data.OleDb.OleDbCommandBuilder должен автоматически генерить SQL команды к базе данных (таблица имеет первичный ключ).
--------------------
http://www.certifications.ru/publicresults.php?tu_id=45939
PM MAIL   Вверх
arilou
Дата 1.3.2006, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

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



Цитата(albert21 @ 1.3.2006, 23:06 Найти цитируемый пост)
И вообще, System.Data.OleDb.OleDbCommandBuilder должен автоматически генерить SQL команды к базе данных (таблица имеет первичный ключ).

Чтобы он смог работать, вся информация о schema должна присутствовать в датасете. А он у тебя не типизированный, и скорее всего инфы в нем нет.




--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Hidrag
Дата 2.3.2006, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Если запись в базе точно удаляется, то можно после удаления очистить датасет, заново наполнить его ДатаАдаптером и ДатаГрид.ДатаСорс заново приравнять к нужной таблице...


--------------------
user posted image
PM WWW ICQ   Вверх
arilou
Дата 2.3.2006, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

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



Цитата(Hidrag @ 2.3.2006, 11:57 Найти цитируемый пост)
Если запись в базе точно удаляется, то можно после удаления очистить датасет, заново наполнить его ДатаАдаптером и ДатаГрид.ДатаСорс заново приравнять к нужной таблице...

А зачем? Если все правильно настроить, то будет работать как часы smile


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
albert21
Дата 2.3.2006, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата

А зачем? Если все правильно настроить, то будет работать как часы


Полностью согласен. Но что-то настроить не получается создавал я типизированный ДатаСет и снова получил туже картину

Файл прикрепил, может кто заинтерисуется проблемой!
База данных в папке с exe-шником

Присоединённый файл ( Кол-во скачиваний: 66 )
Присоединённый файл  WindowsApplication1.zip 109,06 Kb
--------------------
http://www.certifications.ru/publicresults.php?tu_id=45939
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

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

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

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


 




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


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

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