| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Базы данных под .NET > Обновление записей DataGridView |
| Автор: albert21 20.2.2006, 21:56 | ||
Подскажите плиз!
Проблема: Из базы данных запись удаляется, а из Grid`а нет! Как обновить ГРИД? |
| Автор: Exception 21.2.2006, 11:26 |
| DataGridView.Refresh()? |
| Автор: albert21 21.2.2006, 11:43 | ||
Это я пробовал! Не помогает! |
| Автор: arilou 23.2.2006, 13:20 |
| albert21, Exception, и как же вы хотите, чтобы датасет синхронизировал изменения сам? Надо удалить row из датасета, и вызвать DataAdapter.Update(). Есессно, необходимо чтобы в адаптере присутствовала эта самая DeleteCommand. |
| Автор: mr.DUDA 23.2.2006, 16:08 | ||
Последняя строка вызывает сомнения. Надо бы её убрать, либо заменить на AcceptChanges(). |
| Автор: albert21 23.2.2006, 22:35 | ||||
Пробовал, ситуация без изменений! Вообще не понимаю в чём проблема! В ASP.NET у меня возникал подобный вопрос, но его удалось решить так:
Но там использовался просто грид! В Windows приложении я не знаю как получить набор выделенных строк, как обращаться к полям выделенной строки? |
| Автор: mr.DUDA 23.2.2006, 22:50 |
| В WinForms-приложении любой контрол незамедлительно реагирует на изменения в источнике данных, к которому он привязан. Единственным подводным камнем тут может быть необходимость вызвать у контрола BeginUpdate до обновления и EndUpdate после обновления источника данных... |
| Автор: albert21 1.3.2006, 12:23 | ||
| Всё с самого начала логично! Я произвожу изменения в самой базе данных (напрямую), а не в DataSet! Поэтому AdapterDisk.Update(DiskotekaDS, "Disk"); ни чего не делает, так как DataSet и не изменился! Я сделал так:
Ну а потом: AdapterDisk.Update(DiskotekaDS, "Disk"); получаю ошибку "Не был задан текс команды для командного объекта" Подскажите, как исправить? |
| Автор: arilou 1.3.2006, 12:29 |
| albert21, заполнить DataAdapter.DeleteCommand. Ты что, не читал мой пост? |
| Автор: albert21 1.3.2006, 21:03 | ||
arilou, извиняюсь действительно не читал, упустил из виду почему-то!
чем его заполнить? Ведь запись удаляется в зависимости от значения первичного ключа! DELETE FROM Disk WHERE ID=... ??? |
| Автор: albert21 1.3.2006, 23:06 |
| И вообще, System.Data.OleDb.OleDbCommandBuilder должен автоматически генерить SQL команды к базе данных (таблица имеет первичный ключ). |
| Автор: Hidrag 2.3.2006, 11:57 |
| Если запись в базе точно удаляется, то можно после удаления очистить датасет, заново наполнить его ДатаАдаптером и ДатаГрид.ДатаСорс заново приравнять к нужной таблице... |
| Автор: arilou 2.3.2006, 13:52 | ||
А зачем? Если все правильно настроить, то будет работать как часы |
| Автор: albert21 2.3.2006, 20:12 | ||
Полностью согласен. Но что-то настроить не получается создавал я типизированный ДатаСет и снова получил туже картину Файл прикрепил, может кто заинтерисуется проблемой! База данных в папке с exe-шником |
| Автор: albert21 3.3.2006, 00:15 | ||
Я разобрался!!!
Так вот, для того чтобы выше описанных проблем не возникало необходимо закоментировать всё что связано с командами Insert, Update, Delete! Тогда, при наличии OleDbCommandBuilder, команды редактирования будут генериться без проблем. Может для кого-то это и было очевидным, но не для меня! Программу я писать ещё не закончил, а следовательно может возникнуть продолжение разговора! Всем спасибо за внимание! |
| Автор: Butch 18.1.2007, 16:03 | ||||||||
| Всемогущий All помоги чем можешь устал биться головой ап стену не стал открывать новую тему т.к. данная пересекается очень близко с моей проблемой..... Попробую подробней описать мою проблему: Есть класс для работы с БД Access и две формы. Первая форма содержит dataGridView (Enable Adding=false, Enable Editinig=false, Enable Deleting=falase, Enable Column Reordering=false) и кнопку для редактирования БД(открывает вторую форму с несколькими textBox-ми, кнопками `Ок` и `Отмена`). Код из класса для работы с БД:
на Load формы с dataGridView использую следующий код:
код кнопки для вызова второй формы для едита:
код кнопки 'Ок' на второй форме:
Ну вот вроде бы и все, а проблема следующая: по нажатии кнопки 'Ок' - изменяется таблица в БД, dataGridView остается не изменым но если закрыть и открыть форму увидим измененный дата грид Пробывал - MyTable.AcceptChanges(); // не полетело - dataGridView.Refresh(); // не полетело - ds.Clear(); повторный вызов BD.SelectTable("...."); // летит, но криво, а криво не охото |
| Автор: albert21 18.1.2007, 20:17 | ||||
У меня вызывает сомнения вот этот код:
Хотя может это и нормально. Эсли у тебя типизированный ДатаСет, то могу предложить вот такой вариант:
А вообще по поводу твоего кода такие соображения: Адаптер нужен для того, чтобы работать непосредственно с БД. Для того, чтобы изменения отображались в гриде необходимо удалить запись в ДатаСете, а затем указать гриду источник dataGridBook.DataSource = dataSetBiblion.Table; |
| Автор: RWander 31.10.2007, 23:00 |
| в продолжении темы.. как обновить DataGridView после занесения в базу данных новой строки. |
| Автор: thomas 1.11.2007, 17:55 | ||
| RWander, Если мой DGV отображает данные из таблицы ДатаСета в которую были внесены изменения, то к двум стандартным строкам кода я добавляю еще две
Если же таблица ДатаСета, которая отображается в DGV, не содержит в себе обновленные данные, то надо по-новой выполнить запрос к БД и заполнить таблицу ДС обновленными данными и после этого вывести в DGV. |
| Автор: insaneghost 12.10.2009, 09:55 |
| а еще есть какой-нибудь способ обновить dgv без изменения у него datasource? |