| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Базы данных под .NET > Не срабатывает Update в datagridview |
| Автор: shark1 20.1.2008, 10:32 | ||
| вернее он срабатывает все нормально вижу добавленную строку в datagridview или наоборот после удаления какого нибудь item вижу изменения в datagridview,но при этом бандинг замирает на первой строке и все ! и ни хочет сдвигатся,все забандинные текст боксы показывают значения первого itemа,и не важно если я с помощью поиска хочу найти какойтоitem он его находит но бандинг остаётся на первом в datagridview.Подскажите в чем дело.Зарание спасибо. Update:
|
| Автор: informatik 20.1.2008, 19:49 |
| Update датагрида здесь вообще ни к чему.. И вообще весь синтаксис непраивльный!!!! Я так понимая по нажатию кнопки Update ты хочешь передать изменения в БД?? Но ты посмотри что у тебя написано: Ты сначала по по запросу берешь нужную таблицу, потом тут же пытаешься обновить..., но на самом деле то ты эту таблицу только что создал... и никаких изменений в ней нет!!! |
| Автор: shark1 21.1.2008, 10:04 | ||
Да извеняюсь код дествительно "G",убрал все лишнее,но все равно бандинг замирает на строке на кот. стоит курсор в тот момент когда я нажимаю btn_Update.И все во всех текст боксах остаются значения старые и они не обновляются :( Подскажите плиззз,как подправить.Спасибо.
|
| Автор: informatik 21.1.2008, 18:20 | ||||||
| shark1 ты меня похоже непонял... твой Update вообще неправильный. Загрузка двнных из БД и обновление - две совершенно разные вещи и должны выполняться отдельно. DataAdapter создается как глобальная переменная:
Далее нужно загрузить данные в отдельной процедуре, напрмер при загрузке приложения:
................ делаем какие либо изменения в DataGrid ................ Двлее передаем обновления, но для этого должна быть определена логика обновления в DataAdapter:
Добавлено через 8 минут и 59 секунд Вот тебе еще ссылочка на тему. Туда глянь. http://forum.vingrad.ru/forum/topic-187096/kw-sql/hl/%25D0%25BE%25D0%25B1%25D0%25BD%25D0%25BE%25D0%25B2%25D0%25BB%25D0%25B5%25D0%25BD%25D0%25B8%25D0%25B5+%25D0%25B1%25D0%25B4/index.html# Да и вообще поищи в поиске по форуму, много примеров найдешь.. |
| Автор: shark1 22.1.2008, 10:36 |
| informatik я тебя понял и ты прав насчет того что мне не нужно делать(пока)изменения в самом datagridview.У меня есть button Insert,и Delete кот.делают своё дело.Одна вставляет данные другая удаляет(из ДБ),а вот Update должна только показать эти изменения в datagridview(т.е если я что то добавил показать добавленную строку,если удалил что то то обновить datagridview и показать уже без удаленной строки).Но вот что то не срабатывает,вчера перерыл весь форум но так и не нашол ответ :(,восновном все примеры используют запрос Select ... where ..., а мне это не нужно мне нужно только показать обновления.Вот этот код не работает : adapter1.Update(ds, "Users"); ds.AcceptChanges(); на этой строке :adapter1.Update(ds, "Users"); выпадает :Update unable to find TableMapping['Users'] or DataTable 'Users'. Подскажи что сделать плиззз,зарание спасибо. |
| Автор: thomas 22.1.2008, 11:06 |
| shark1, Приветствую. Приведи код полность. |
| Автор: shark1 22.1.2008, 12:26 |
| Так нет не какого кода вот этот недоделанный кусок и есть весь(многострадальный :( :( )код. adapter1.Update(dataTable); DataSet ds = new DataSet(); adapter1.Update(ds, "Users"); ds.AcceptChanges(); dataGridView1.DataSource = ds.Tables["Users"]; |
| Автор: informatik 22.1.2008, 14:19 | ||
| shark1, А по кнопкам Insert, Delete я так понял у тебя изменения идут прямо в базу.. не попадая в DataSet??? Метод Update у DataAdapter вносит изменения в БД и поэтому для твоих целей он вообще ненужен.. Если так то в обработчике кнопки Update нужно оставить так:
А вообще как видно проблема может быть не в этом, а в неправильном обявлении и использовании переменных (DataSet и DataAdapter), ты бы действительно выложил весь код, тогда бы быстро нашли твою ошибку... |
| Автор: shark1 22.1.2008, 15:01 | ||
Большое спасибо за вашу помощь.Вот код(если его так можно назвать :( ?)
последний пример вот на этой строке : adapter1.Fill(dataSet11, "Users"); выпадает на : No value given for one or more required parameters. |
| Автор: thomas 22.1.2008, 15:43 | ||||||||||||
| shark1, Приветствую. При беглом взгляде на приведенный выше код, увидел следующие ошибки: 1) если уже есть одно соединение и один ДатаАдаптер
то зачем потом создавать их снова?
Обьявите глобально соединение и ДатаАдаптер. При загрузке формы создайте обьект соединения и в дальнейшем по мере необходимости его открывайте и закрывайте. ДатаАдаптер инициируем при загрузке формы. И раз у вас одна таблица так и пользуйте один ДатаАдаптер по мере необходимости. 2) Вот это
3)
Вы обьявили и создали adapter1 в другом методе. Этот обьект не видим за пределами своего метода. А вызываете его совсем в другом методе. Ай-ай-ай, как не хорошо. Кстати я так и не понял смысла вот этих действий
|
| Автор: shark1 22.1.2008, 16:32 | ||
| thomas УРА лёд тронулся не знаю что я тут наколдовал,НО если я делаю Insert а потом Update то все работает как в сказке,даже гад бандинг тоже работает,а вот если я делаю Delete и потом делаю Update то в(почемуто)вылетает на этой строке : adapter.Fill(ds, "Users"); пишет : The SelectCommand property has not been initialized before calling 'Fill'. Подскажи те плиззз,ОГРОМНОЕ спасибо. Kod Update:
|
| Автор: informatik 22.1.2008, 17:08 |
| А я вот непонимаю зачем открывать соединение... Метод Fill() у датаАдаптера сам открывает и закрывает соединение... или я ошибаюсь......... |
| Автор: thomas 22.1.2008, 17:24 | ||
| shark1, Приветствую. Сделай так.
|
| Автор: shark1 23.1.2008, 10:35 | ||
ВСЕМ ВСЕМ ВСЕМ моим учителям и помошникам,ОГРОМНОЕ СПАСИБО за ваши нервы,за ваше время и вашу помощь,вот он многостродальный код для btn_Update:
все работает как надо,и после Insert и после Delit.Спасибо. |
| Автор: informatik 23.1.2008, 19:33 |
| Просто супер!! Но много лишнего... у меня такой код состоит максимум из 3-х строк!! |
| Автор: akizelokro 29.1.2008, 13:03 | ||
Можно вопрос?
полностью обновляет содержимое гриды? |
| Автор: thomas 29.1.2008, 17:27 |
| akizelokro, Приветствую. Метод Fill для ДатаАдаптера заполняет таблицу "Users" в ДатаСете ds. Естественно перед вызовом этого метода должно быть создано и открыто соединение с БД, задана команда на выборку данных из таблицы, создан ДатаАдаптер adapter. И соответственно для DataGridView присвоено свойство DataSource равное ДатаСету ds и задано свойство DataMember равное "Users" Тогда в DataGridView отобразяться данные из таблицы "Users" ДатаСет ds. Если надо отобразить измененные данные, то перед этим нужно обнулить свойство DataSource для DataGridView. И снова его задать. Плюс вызвать метод Refresh() для DataGridView. |
| Автор: akizelokro 30.1.2008, 10:17 |
| Еще пара вопросов. Насколько я понимаю, производится при вызове метода Fill проводится полная "перечитка" таблицы Users? (что приемлемо при обновлении данных до реальных БД, но неэффективно при вставке/удалении одной или немногих записей?). Думаю, оптимальней было бы добавлять(удалять) строку в DBGrid и затем использовать InsertCommand(DeleteCommand) с последующим вызовом Update, что (как мне кажется) уменьшает работу с БД до минимума. Это так? Также, что происходит при Fill c датагридом. У меня при его использовании обновляется датагрида и текущей строкой в датагриде становится первая. Как этого избежать при добавлении строки, чтобы текущей оставалась та строка, которую я добавил и как оно и должно быть? Еще мне пока непонятно, как при InsertCommand обновляется значение автоинкрементного столбца. Делается ли это автоматически при Update(), или значение будет доступно после Fill() или я могу его как-то получить из БД другим способом? |
| Автор: RedButterfly 3.9.2008, 12:48 | ||||||||
что-то я немного запуталась в этом вопросе... вот так загружаю форму
и вот такое событие при нажатии на кнопку
то ли лишнего написала? запись из текстового поля в базу данных добавляется сразу же, но если при работающей программе залезть в сервер и удалить там строку, а потом в программе добавить новую строку, то в ДатаГридВью все-равно удаленную строку видно... не пойму почему :( ведь вот эта строка
должна была наверное загрузить данные ПО НОВОЙ... |