Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
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
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.02.2021, 15:45
Ответы с готовыми решениями:

Изменение содержимого одной ячейки Datagridview после изменения другой ячейки
Здравствуйте. Есть Datagridview с 2 столбцами. Столбцы типа ComboBox. В 1 столбце уже забиты значения, 2 столбец пустой. Необходимо сделать...

Изменение ячейки таблицы на текстовое поле с содержанием ячейки при клике на неё
Доброго времени суток! Подскажите, как реализовать? Есть некая таблица, в которой хранятся 7 значений. Как сделать так, чтобы при...

Изменение формата ячейки в зависимости от заливки другой ячейки
Здравствуйте! Помогите решить задачку. Средствами условного форматирования чтоб ячейка B1 окрасилась в тот же цвет что и ячейка...

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
 Аватар для Kazbek17
1484 / 939 / 454
Регистрация: 06.02.2012
Сообщений: 2,868
22.02.2021, 17:31
Цитата Сообщение от Sanya9b Посмотреть сообщение
Да, как то так, и когда в ней были значения а потом стала пустой выскакивет ошыбка та что описана выше.
Значит у вас в событие CellEndEdit есть какой то код. Вот его и показывайте.
0
0 / 0 / 0
Регистрация: 22.06.2018
Сообщений: 93
22.02.2021, 17:41  [ТС]
Вот в этом месте возникает ошыбка.
C#
1
 string s1 = dgv. Rows [selectedid].Cells[1].Value.ToString();
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
Цитата Сообщение от Sanya9b Посмотреть сообщение
Выдает ошибку object reference not set to an instance of an object.
Цитата Сообщение от Sanya9b Посмотреть сообщение
string s1 = dgv. Rows [selectedid].Cells[1].Value.ToString();
Что у Вас в selectedid, смотрели ?
0
 Аватар для Kazbek17
1484 / 939 / 454
Регистрация: 06.02.2012
Сообщений: 2,868
23.02.2021, 08:40
MsGuns,
Цитата Сообщение от MsGuns Посмотреть сообщение
Что у Вас в selectedid, смотрели ?
Вот там скорее всего -1 и null у него лупит.


Sanya9b,
И напишите так.
C#
1
string s1 = dgv.CurrentRow.Cells[1].Value.ToString();
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
Цитата Сообщение от Sanya9b Посмотреть сообщение
Скажите пожалуйста какая разница между "" и null
Для SQL или c# ? Там есть разница

Добавлено через 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
Цитата Сообщение от Sanya9b Посмотреть сообщение
dgv.CurrentRow.Cells[1].Value стает равным null
Читаем, что такое DataGridView.CurrentRow и смотрим, если в этой строке ячейка с порядковым номером 2.

Добавлено через 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  [ТС]
Все нормально я разобрался всем спасибо! Проблема была в
C#
1
.ToString()
в конце, не хотело приводить не найденое значение к типу насколько я понял. Решил путем конвертации
C#
1
Convert.ToString (dgv.CurrentRow.Cells[1].Value)
Всем спасибо!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.02.2021, 12:10
Помогаю со студенческими работами здесь

Изменение значения фиксированной ячейки в зависимости от активной ячейки
Добрый день. Помогите пожалуйста написать макрос так, чтобы при изменении активной ячейки, фиксированная ячейка изменяла свое значение в...

QTableView - очистка ячейки
Столкнулся со странной мелочью. QTableView выводит дату, но не удаётся удалить её! То есть у меня в БД происано что мол некоторое поле у...

Изменение фона ячейки в зависимости от значения ячейки
Подскажите пжт, как при формировании отчета и вывода его в таблицу в 1с 7.7 программно менять цвет фона ячейки в зависимости от значения...

Очистка содержимого скрытой ячейки.
Приветствую вновь! Проблема: в 2003 excel'e делаю Worksheets("Z").Range("A6:X11").Clear Все хорошо. в 2007 excel'e делаю ...

Очистка ячейки от лишних знаков
Здравствуйте. Подскажите, пожалуйста, как очистить ячейку от любых символов, кроме цифр и букв? Т.е. из "377 40.7365-B"...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
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 На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru