|
0 / 0 / 0
Регистрация: 22.06.2018
Сообщений: 93
|
|
Очистка ячейки и изменение БД22.02.2021, 15:45. Показов 1015. Ответов 15
Метки нет (Все метки)
Как внести изменения в БД если я очистил ячейку dgv в которой было значение. Использую событие cellendedit. Выдает ошибку object reference not set to an instance of an object.
0
|
|
| 22.02.2021, 15:45 | |
|
Ответы с готовыми решениями:
15
Изменение ячейки таблицы на текстовое поле с содержанием ячейки при клике на неё Изменение формата ячейки в зависимости от заливки другой ячейки |
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
|
| 22.02.2021, 17:28 | |
|
После любого изменения в любой ячейке Вы пытаетесь сунуть эту ячейку (точнее, ее содержимое) в базу ?
0
|
|
|
0 / 0 / 0
Регистрация: 22.06.2018
Сообщений: 93
|
|
| 22.02.2021, 17:29 [ТС] | |
|
Да, как то так, и когда в ней были значения а потом стала пустой выскакивет ошыбка та что описана выше.
0
|
|
|
1484 / 939 / 454
Регистрация: 06.02.2012
Сообщений: 2,868
|
|
| 22.02.2021, 17:31 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 22.06.2018
Сообщений: 93
|
||||||
| 22.02.2021, 17:41 [ТС] | ||||||
|
Вот в этом месте возникает ошыбка.
0
|
||||||
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
|
| 22.02.2021, 18:12 | |
|
1. В "базе" нет ячеек. И нет строк. И гридов тоже нет.
2. В "базе" имеются таблицы, "разбитые" на колонки(столбцы), каждый из которых имеет некоторые ограничения: тип данных, ссылку на другую таблицу, признак ключа, автоинкремент, допустимость отсутствия значения (NULL) и пр. 3. В таблице БД могут быть записи, состоящие из полей в строгом соответствии с колонами. Т.е. все записи одной таблицы полностью однотипны. 4. Изменения в БД вносятся позаписьно, т.е. нельзя изменить содержимое одного поля - нужно менять всю запись. При этом не важно сколько полей в ней меняются, хоть ни одного ! Запись все равно "перепишется". 5. Грид лишь отображает содержимое выборки из таблицы либо из нескольких таблиц, поставляемое ему в виде датасета. 6. При редактировании в гриде Вы изменяете содержимое этого самого датасета, точнее полей той его записи, которая соответствует строке грида, где Вы "дергаете" ячейки. 7. При попытке внести изменения в БД туда летит вся запись со всеми полями, при этом может быть "авария" если какое-либо поле (ячейки грида) этой записи (строки грида) имеет значение, нарушающее требование (ограничение) это поля, заложенное в таблицы при ее создании. Пример: Есть грид с 4 колонками, отображающий таблицу БД из 4 колонок. При этом первая колонка - ID, вторая - строка, которая не может быть пустой (NOT NULL), третья - дата, четвертая - число. Вы вводите в 1 ячейку число и при попытке перейти в соседнюю ячейку получаете в лицо. (Нарушение автозначения ID) Вычистили содержимое ячейки 2 - опять по морде (недопустим NULL), В третью ввели дату с ошибкой - эффект тот же И т.д. Что делать ? Во-первых написать код для валидации каждого типа данных и по попытке "уходя" с только что измененной ячейки выполнять этот самый код и, если ошибка, тут же орать о ней сообщением. Никакой попытки чего-то куда-то писать ! Во-вторых, независимо от того, сколь много ячеек было изменено, проверять ВСЕ ! И опять же при нарушении орать благим матом ! И опять никакой записи никуда. Убрать валидацию после каждого клика на ячейке. Поставить общую валидацию и попытку внесения изменений в базу только при переходе на новую строку и при условии изменения текущей. Вся эта информация есть в датасете - изучайте матчасть !
0
|
|
|
0 / 0 / 0
Регистрация: 22.06.2018
Сообщений: 93
|
|
| 22.02.2021, 22:26 [ТС] | |
|
Вы очень много написали, и потратили свое время, спасибо вам за это, но я знаю что такое datagridview и что такое база даных. И ошибка возниккет вовсе не в обращении в БД, а в присвоении переменой значения ячейки datagridview, что я и показал в строчке кода. В том месте и возникает ошыбка. К примеру значение ячейкы было равно "1", а нужно чтобы стало null. Вопрос в том как передать этот null, почему ругается? В последовательном запуске видно что Value ячейки равно null, и я так понимаю что имено за этого ругается.
Добавлено через 13 минут Возникла идея просто проверять на наличие ошыбки каждую переменую через try catch, и в catch присваивать имено null или "", может это и и не свовсем нормалтно, но должно работать. Может есть еще какие-то предложения более верные?
0
|
|
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
|
| 22.02.2021, 23:47 | |
|
0
|
|
|
1484 / 939 / 454
Регистрация: 06.02.2012
Сообщений: 2,868
|
|||||||
| 23.02.2021, 08:40 | |||||||
|
MsGuns,
Sanya9b, И напишите так.
0
|
|||||||
|
0 / 0 / 0
Регистрация: 22.06.2018
Сообщений: 93
|
|
| 23.02.2021, 12:56 [ТС] | |
|
Нет в селктед id у меня номер ячейки, там в минус не заходит проверил! Скажите пожалуйста какая разница между "" и null
0
|
|
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
||
| 23.02.2021, 13:33 | ||
![]() Добавлено через 48 секунд Посмотрите здесь: https://progi.pro/null-t234/98
0
|
||
|
0 / 0 / 0
Регистрация: 22.06.2018
Сообщений: 93
|
|
| 23.02.2021, 14:00 [ТС] | |
|
В c#.
0
|
|
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
|
| 23.02.2021, 15:12 | |
|
null - это "универсальный" объект, означает что обращение идет к не существующему объекту. Который может быть абсолютно любого типа. Точнее, код обращается к нему как объекту соответствующего типа. Еще говорят, "объект не инициализирован" т.е. не определен. Ссылка на него не указывает на область памяти, занятую объектом.
"" (пусто) - относится к строкам. Оператор if (mystring == "") проверяет пустая ли строка. Строки в c# - это отдельная тема. Почитайте также про int? (для примера).
0
|
|
|
0 / 0 / 0
Регистрация: 22.06.2018
Сообщений: 93
|
|
| 23.02.2021, 17:09 [ТС] | |
|
Пробывал я и Ваши советы и свой вариант и никак не выходит, из-за того что dgv.CurrentRow.Cells[1].Value стает равным null, вот как это убрать или что с ним сделать для меня пока не подъёмная задача
0
|
|
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
||
| 23.02.2021, 18:02 | ||
|
Добавлено через 5 минут https://coderoad.ru/45560115/D... electedrow Добавлено через 6 минут Если поле, "скрывающееся" в датасете под ячейкой, имеет тип int/number/datatime и т.д., то перед попыткой конвертировать его содержимое в строку следует проверять его на null.
1
|
||
|
0 / 0 / 0
Регистрация: 22.06.2018
Сообщений: 93
|
|||||||||||
| 24.02.2021, 12:10 [ТС] | |||||||||||
|
Все нормально я разобрался всем спасибо! Проблема была в
0
|
|||||||||||
| 24.02.2021, 12:10 | |
|
Помогаю со студенческими работами здесь
16
QTableView - очистка ячейки Изменение фона ячейки в зависимости от значения ячейки Очистка содержимого скрытой ячейки. Очистка ячейки от лишних знаков Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|