|
0 / 0 / 0
Регистрация: 24.01.2014
Сообщений: 69
|
|
Синхронизация datagridview и БД ms sql server 200824.01.2014, 15:45. Показов 6731. Ответов 35
Метки нет (Все метки)
привет, подскажите как быть:
завел на форму datagridview, загрузил таблицу по аналогии как в FAQ(Загрузка таблицы в DataGridView) т.е. FAQ я читал соответственно с похожими темами ознакомился, но актуальность вопрос не потерял((. Вопрос: как настроить datagridview так, что бы работал без кнопок. Добавили новую запись в гриде она добавилась в таблице, изменили содержание ячейки в гриде - поменялась в таблице и так далее. Грубо сделать datagridview по функциям аналогом ленточной формы(access) но не для mdb файла, а для таблице к которой подключены в бд(ms sql server) спасибо.
0
|
|
| 24.01.2014, 15:45 | |
|
Ответы с готовыми решениями:
35
Внедрение Windows server 2008+MS SQL Server 2008+1C:SQL Настройка SQL Server 2008 для работы с SQL Server Management Studio Чем отличается Microsoft® SQL Server® 2008 Express with Tools от Microsoft® SQL Server® 2008 Express with Adva |
|
1722 / 1209 / 228
Регистрация: 23.12.2010
Сообщений: 1,544
|
||||||
| 28.01.2014, 14:43 | ||||||
Сообщение было отмечено Памирыч как решение
Решение
Код из моего примера? Там на строке вывода месиджа возникает исключение (tostring не отрабатывает, яже писал) и строкой resume next переходит выполнение дальше
Добавлено через 28 минут Вроде так все работает корректно.
Короче тут что-то много получается проблем, ИМХО...
1
|
||||||
|
0 / 0 / 0
Регистрация: 24.01.2014
Сообщений: 69
|
||||||
| 28.01.2014, 15:04 [ТС] | ||||||
|
Логику понял, спасибо.
По удалению, пишет: Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции.
Возможно как-то получить набор e.Row.Cells(0).Value в виде 1,3,4,6 ?
0
|
||||||
|
1722 / 1209 / 228
Регистрация: 23.12.2010
Сообщений: 1,544
|
|||
| 28.01.2014, 16:45 | |||
|
так e.Row.Cells(0).Value - возвращает значение нулевого столбца строки, которая подлежит удалению...
0
|
|||
|
0 / 0 / 0
Регистрация: 24.01.2014
Сообщений: 69
|
|
| 28.01.2014, 17:12 [ТС] | |
|
Столбцы есть, они формируются при загрузке формы из sql server - select'ом
1,3,4,6 - это key из select запроса(в datagridview это как раз нулевой столбец) Т.е. запрос на удаление делаю такой: delete from table where key = e.Row.Cells(0).Value - выводит ошибку. Если e.Row.Cells(0).Value поместить в какую-то переменную в виде 1,3,4,6 то по логике(могу ошибаться) можно будет удалить выбранные строки через where key in(какая-то переменная)
0
|
|
|
1722 / 1209 / 228
Регистрация: 23.12.2010
Сообщений: 1,544
|
||
| 28.01.2014, 17:25 | ||
|
0
|
||
|
0 / 0 / 0
Регистрация: 24.01.2014
Сообщений: 69
|
|
| 28.01.2014, 17:45 [ТС] | |
|
Возможно меня не так понял)
Ещё раз: datagridview - заполнена из select имеет вид(пример): key 1 2 3 4 5 6 выделили 4,5,6 нажали delete e.Row.Cells(0).Value - открывается 3 msgbox сначала 4 потом 5 потом 6 - на все жмем ок. Всё верно? получается должен отработаться запрос 3 раза DELETE FROM table WHERE key =" & e.Row.Cells(0).Value верно? Удаления не происходит пишет ошибку: "Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции." Подскажите пожалуйста, понимаю, что за сегодня "замучал" уже(
0
|
|
|
1722 / 1209 / 228
Регистрация: 23.12.2010
Сообщений: 1,544
|
||||||
| 28.01.2014, 18:02 | ||||||
|
Надо полагать происходит следующее:
После удаления строки с ключом 3 происходит перезаполнение DGV. При этом DGV полностью очищается от строк и столбцов. А потом уже она снова заполняется. Но, поскольку ROW передается по ссылке, а не по значению, фактически ми теряем объект Row для следующего удаления (тк. очищается выделение и параметр e тоже черти чего содержит) Производите только удаление из БД, не обновляя DGV. Она у вас сама по себе уже удаляет из себя строки. А сейчас вы фрагментом Me.DataGridView1.DataSource обновляете ее. Т.е. фактически чистите от всего, а потом снова наполняете. Помните - сложные типы передаются по ссылке, а не по значению. Пример: В1 as Datagridviewrow = me.dgv1.rows(1) B2 as Datagridviewrow = B1 Если изменим me.dgv1.rows(1), то изменится и B2, т.к. В2 всего лишь содержит ссылку на me.dgv1.rows(1). Пример 2
0
|
||||||
|
0 / 0 / 0
Регистрация: 24.01.2014
Сообщений: 69
|
||||||
| 28.01.2014, 19:12 [ТС] | ||||||
|
При нажатии delet если выбраны три строчки открываются 3 msgbox после нажатия 3 раза ок, обновляется datagridview без этих 3х строк. По datagridview - всё норм.
Не работает лишь часть с sql delete. Как мне взять цифры из этих 3 msgbox и вложить их в одну переменную вида 1,2,3 ? Добавлено через 35 минут Удаление происходит, но пишет "Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции." При этом если выбраны несколько строк то удаляет только первую.
0
|
||||||
|
|
|
| 28.01.2014, 19:30 | |
|
Используйте DataAdapter он как раз предназначен для этого,
если его корректно настроить для обновления конкретной таблицы, не будет ни каких проблем
0
|
|
|
0 / 0 / 0
Регистрация: 24.01.2014
Сообщений: 69
|
|
| 28.01.2014, 19:41 [ТС] | |
|
Примеры корректного использования для удаления можно?
0
|
|
|
|
||||||
| 28.01.2014, 20:41 | ||||||
|
Настройка DataAdapter для обновления DataGridView
Кликните здесь для просмотра всего текста
1
|
||||||
|
0 / 0 / 0
Регистрация: 24.01.2014
Сообщений: 69
|
|
| 29.01.2014, 13:58 [ТС] | |
|
А в какой момент вызывать UpdateDataGrid() ?
Добавлено через 31 минуту Прописал всё, в form_load запускаем FillDataGrid() верно? В datagridview1 подгружается табличка, как настроить, что бы изменения внесенные в dgv применялись к таблице в бд? Добавлено через 59 минут p.s. не через кнопку... Добавлено через 1 час 5 минут Сделал кнопку При изменении/добавлении новых записей нажимаем кнопку и она обновляет/изменяет таблицу(ms sql server) При удалении: сначала выделил строку нажал delet строка исчезает, потом нажал на кнопку выдало ошибку rows = daDataGrid.Update(tblTable1) - пишет "Необходимо объявить скалярную переменную "@..." Что делаю не так? Добавлено через 39 минут С Удалением справился. Скажите как сделать, что бы создании новой стоки, при заполнении пользователем отображались данные в первой ячейки из бд ? Первый столбец key нажали на последнюю строку(что бы создать новую) отображались данные из sql запроса(select max(key)+1 from table) в строке столбца key? И что бы эту строку пользователь не редактировал
0
|
|
|
|
|
| 29.01.2014, 19:44 | |
|
Самый простой способ назначить в БД столбцу Key свойство AutoIncriment=True
0
|
|
|
0 / 0 / 0
Регистрация: 24.01.2014
Сообщений: 69
|
|
| 30.01.2014, 18:28 [ТС] | |
|
У кого нибудь есть готовое решение работы с datagridview с ms sql БЕЗ КНОПОК ? Не куски кода,а нормально функционирующий код как у вас в программе. Пример оформления тут
Только без всяких selectов и подключения к бд - этого полно в интернете, в книгах и всяких статьях. А четкое выполнение решения update|insert|delete Добавлено через 1 час 49 минут Может за бабки кто поможет?
0
|
|
|
|
|
| 30.01.2014, 19:24 | |
|
Проблема не в DGV, а в логике твоей программы.
Какой смысл делать мгновенное обновление БД? Для того чтобы копить в ней ошибки, а потом геройски их искать? На оборот нужно делать кнопку по которой будет выполняться Message с вопросом: "Сохранить изменения?" и желательно два раза и только потом будет происходить обновление БД
0
|
|
|
0 / 0 / 0
Регистрация: 24.01.2014
Сообщений: 69
|
|
| 04.02.2014, 15:24 [ТС] | |
|
Да сделал уже) кто внес ошибки сам их и будет исправлять!!! Просто делаю аналог ленточной формы да и всё)
0
|
|
| 04.02.2014, 15:24 | |
|
Можно использовать бд созданную в SQL server 2012 на SQL server 2008? Нужна помошь в подключении SQL Server 2008 и Visual Studio 2008 Отличие VS 2008 от VS 2008 в SQL Server 2008 OC Window Server 2008(64)+1CV81 Сервер(64)+SQL 2008 (EXPRESS) Visual Studio 2008+ MS SQL Server 2008 добавления записей Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ
Основная суть и тезисы по измерениям:
0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема.
Объект не может перемещаться в 0D.
1D (Первое измерение):. . .
|
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek
ВВЕДЕНИЕ
Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
|
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
|
Запись в регистр сведений независимо от заполненности табличной части
Maks 25.08.2026
Реализация из решения ниже выполнена на нетиповом документе с несколькими табличными частями, разработанного в КА2.
Задача:
Обеспечить запись документа в регистр сведений независимо от. . .
|
|
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется.
Ну как вам?
|
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания
источниках данных и элементов формы(текстовые поля и метки), опирается все
это на технологию событий и мета. . .
|
Цена ошибки
DevAlt 23.08.2026
Человек я беспокойный и потому заинтересовался OCaml,
в чате форсили функторы модулей как суперфичу.
Пытаясь отдуплить концепт, наткнулся на тутор с простым примером.
А главный принцип обучения от. . .
|
Сегодня суббота, 22.08.2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины.
zorxor 22.08.2026
Сегодня суббота, 22. 08. 2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины. Кто Я, откуда Я пришел и куда Я иду? Эти вопросы не оставляют меня ни на секунду. Жизнь на планете Земля. . .
|