|
4 / 4 / 1
Регистрация: 20.12.2019
Сообщений: 310
|
|||||||||||||||||||||
Удаление строки из DataGridView не с первого раза14.10.2021, 14:33. Показов 1742. Ответов 16
Добрый день! Подскажите пожалуйста. На форме имеется 2 таблицы. Код заполнения, сохранения, удаления строк одинаковый, только название таблиц меняю. Проблема в том, что при удалении выделенной строки из грида происходит не с первого раза. Нажимаю удалить строка остается а таблица просто заново загружается в грид. Я нажимаю второй раз и строка удаляется и из грида и из базы. Как это исправить?
Загрузка в грид
И еще вопрос. Чем отличается апдейт от загрузки? Только строкой апдейт? Или я что-то не верно написал в коде? нельзя просто написать?
0
|
|||||||||||||||||||||
| 14.10.2021, 14:33 | |
|
Ответы с готовыми решениями:
16
Удаление записей с первого раза Как запретить удаление строки в DataGridView, если пользователь не выбрал ни одной строки? |
|
296 / 120 / 33
Регистрация: 06.03.2016
Сообщений: 453
|
||||||
| 14.10.2021, 14:42 | ||||||
|
gena8208, мутный метод
0
|
||||||
|
4 / 4 / 1
Регистрация: 20.12.2019
Сообщений: 310
|
|||||||||||
| 14.10.2021, 14:45 [ТС] | |||||||||||
Может что то в загрузке таблиц. Или обновлении. Не понятно почему так происходит. Может потому что адаптеры и названия переменных одинаковое для обоих таблиц
0
|
|||||||||||
|
296 / 120 / 33
Регистрация: 06.03.2016
Сообщений: 453
|
|
| 14.10.2021, 14:48 | |
|
gena8208, посмотрите тут пример, там вполне внятно написано adapter update
0
|
|
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
|
| 14.10.2021, 15:14 | |
|
gena8208, Вы пытаетесь вносить изменения в таблицу БД через грид, вероятно, слабо представляя какие "чудеса" ждут Вас
Например, юзер ввел нецифру в числовое поле или не ввел обязательное - будет exception, который придется обрабатывать, проверяя все поля. Есть еще и другие "радости" связанные с коллизиями, неизбежно возникающие при многопользовательской работе.Как надо делать: 1. Использовать модель. Извлекаем набор данных из таблицы, обертываем его в List<Модель> и просто суем его в grid.DataSource, колонки которые можно настроить все в той же модели соответствующими директивами (выравнивание и прочее). Грид используется только для просмотра. 2. Для правки и добавления - модальные формочки, где юзер может ввести нужные данные. По нажатию "сохранить" данные проверяются на валидность и при ошибке возле соответствующего поля надпись "ошибка". Если все ок, то данные с формы кладутся в модель и она передается в методы репозитория (специальный класс в папке Model проекта рядом с файлом класса модели). В методах формируется запрос к БД с подстановкой в параметры данных из пришедшей модели. Если все ок, то модальная форма закрывается, нд в гриде перечитывается и в нем по id ищется активная запись (измененная или добавленная). Точно так же и с удалением, только модальная форма как таковая не нужна, а нужно диалоговое стандартное окно для подтверждения. При этом после перечитки нд ищется ближайшая соседняя по отношению к удаленной запись, id которой перед удалением запоминается в переменной. Добавлено через 2 минуты Забыл добавить - извлечение нд из базы ("перечитка") также в методе репозитория. Т.е. основной код приложения не должен напрямую обращаться к БД от слова совсем - только через репозиторий !
1
|
|
|
4 / 4 / 1
Регистрация: 20.12.2019
Сообщений: 310
|
|
| 14.10.2021, 15:47 [ТС] | |
|
юзверь вводит данные через текстбоксы. Валидность ввода можно и там проверить. Работает с косяками но свою задачу выполняет. Каждый день меняю, добавляю код. Что то новое вношу. Учусь. Грид заметно тормозит от заполнениями полных данных. Постепенное заполнение пока не освоил. 1000 строк уже притормаживает. Но пока обошелся тем что убираю прорисовку строк. Значительно быстрее. Но нет ли возможности на данном этапе решить проблему? Со временем ведь можно и переделать программу. База то остается. А интерфейс осваиваю понемногу. Понятно что перелопачивать много. Но все знать невозможно. Постепенно переделаю через listview
0
|
|
|
4 / 4 / 1
Регистрация: 20.12.2019
Сообщений: 310
|
|
| 14.10.2021, 15:54 [ТС] | |
|
Вот как уже в новом виде это окно
0
|
|
|
296 / 120 / 33
Регистрация: 06.03.2016
Сообщений: 453
|
||||||
| 14.10.2021, 17:17 | ||||||
|
gena8208, так вам и написали как лучше переделать. Создать модели (модель представляет единичную запись в талице), написать свои запросы для работы с бд. И вынести логику из формы.
В коде не видно, но сначала удалили строку из DataTable, потом ее (таблицу) передали в адаптер Update, и после вызвали у этой таблицы AcceptChanges. Вроде, так они работают.
1
|
||||||
|
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
|
|
| 14.10.2021, 19:24 | |
|
ipsorokin, нет смысла вызывать dataTable.AcceptChanges() после dataAdapter.Update(dataTable), потому что это делается в методе Update, только построчно(DataRow.AcceptChanges).
0
|
|
|
4 / 4 / 1
Регистрация: 20.12.2019
Сообщений: 310
|
|||||
| 15.10.2021, 09:22 [ТС] | |||||
|
Добавлено через 7 минут C#Выделить код dataTable.Rows.Remove.... dataAdapter.Update(dataTable) dataTable.AcceptChanges()[/quote] Господа, я не знаю с чем это связано. Не поленился вчера. Создал новый проект. Кинул на форму два грида и скопировал код загрузки в грид и удаления через кнопку из предыдущей программы. Без PageTab строка удаляется с первого раза. Может как то не верно или не туда пихаю загрузку в грид. То я ее при инициализации пихал, потом в формлоад. Может программа не видит что активен первый лист. Хотя при отладке он показывает номер выделенной строки и проходит код удаления, но строка остается и при повторном нажатии удаления строка удаляется и из грида и базы
0
|
|||||
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
||
| 15.10.2021, 12:10 | ||
1
|
||
|
4 / 4 / 1
Регистрация: 20.12.2019
Сообщений: 310
|
||||||||||||
| 15.10.2021, 13:46 [ТС] | ||||||||||||
|
А где в 17 строке?
В целом код то рабочий на чистой форме без Tabpage или не верно я написал код? В лист я тоже пытался загрузить данные из примера
0
|
||||||||||||
|
296 / 120 / 33
Регистрация: 06.03.2016
Сообщений: 453
|
|||||||
| 15.10.2021, 14:00 | |||||||
|
Добавлено через 58 секунд и опять же, говорили так не делать, а создавать модели
0
|
|||||||
|
4 / 4 / 1
Регистрация: 20.12.2019
Сообщений: 310
|
|||
| 15.10.2021, 14:27 [ТС] | |||
|
Я часто смотрю примеры на Metanit а в docs.microsoft.com хрен че поймешь
0
|
|||
|
296 / 120 / 33
Регистрация: 06.03.2016
Сообщений: 453
|
|
| 15.10.2021, 14:33 | |
|
1
|
|
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
|||
| 15.10.2021, 15:07 | |||
1
|
|||
|
4 / 4 / 1
Регистрация: 20.12.2019
Сообщений: 310
|
|
| 15.10.2021, 15:16 [ТС] | |
|
0
|
|
| 15.10.2021, 15:16 | |
|
Помогаю со студенческими работами здесь
17
Удаление строки из DataGridView Удаление строки из DataGridView
Удаление Строки из DataGridView Удаление строки из DataGridView и БД Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
|
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс.
Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
|
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа.
В качестве фильтра для отбора служит предопределенное значение перечислений.
Процедура. . .
|
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
|
|
Оттенки серого
Argus19 18.03.2026
Оттенки серого
Нашёл в интернете 3 прекрасных модуля:
Модуль класса открытия диалога открытия/ сохранения файла на Win32 API;
Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
|
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-rectangles-sdl3-c. zip
finish-rectangles-sdl3-cpp. zip
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|