Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > Хочу, чтоб NULL был NULL, а не 0!


Автор: Papirus 3.7.2006, 15:56
VS.NET2005 & SQL server 2000
Такая вот байда.
В БД есть таблица, в которой одно из полей типа smallint и большинство записей имеют неопределенное значение NULL.
В DataGridView - в этом поле вместо Null отображается 0. Более того при обращению к записи в таблице датасета это поле также возвращает 0 вместо NULL.

PreviewData - отображает пустые ячейки там где NULL. smile 

Заранее благодарен за помощь! 

Автор: mr.DUDA 3.7.2006, 21:40
Чтобы вместо "0" были другие значения - настраиваем свойство DefaultValue у колонки таблицы. Или, если значение уже приходит по select-запросу - настраиваем соотв. свойство в настройках поля таблицы SQL Server. Если же нужно проверить, что именно находится в колонке (пустое значение или 0) - сравниваем значение dataRow[index] с DBNull.Value (пресловутый NULL). Если типы не совпадают - например, в колонке лежит int а нет DBNull - значит имеем дело с заполненным полем таблицы. 

Автор: Papirus 4.7.2006, 08:53
Код

If Not IsDBNull(rw.Item("PositionChild")) Then

В 2003 этот код срабатывал корректно - в 2005 rw.Item("PositionChild")=0 почему-то.  smile 
Цитата(mr.DUDA @  3.7.2006,  21:40 Найти цитируемый пост)
настраиваем свойство DefaultValue у колонки таблицы


DefaultValue - это ведь для новой записи?! А у меня существующие отображаются как 0, а не как пустая ячейка и судя по всему такое значение подставляется вместо NULL уже в таблице датасета. У меня могут быть и 0 значения, но пользователь должен видеть, что в ячейке 0 или NULL. smile

Добавлено @ 08:56 
Цитата(mr.DUDA @  3.7.2006,  21:40 Найти цитируемый пост)
если значение уже приходит по select-запросу

Приходит NULL.
 

Автор: mr.DUDA 4.7.2006, 11:05
Можно попробовать копнуть в сторону DataGridViewCellStyle.NullValue 

Автор: Papirus 4.7.2006, 11:12
Цитата(mr.DUDA @  4.7.2006,  11:05 Найти цитируемый пост)
Можно попробовать копнуть в сторону DataGridViewCellStyle.NullValue 

Кроме (Throw Exeption) ничего не дает выбрать. Кричит, что поле не стринг, потому низзя!!

Добавлено @ 11:12 
Интересно. А это только у меня? 

Автор: mr.DUDA 4.7.2006, 16:12
Всё замечательно работает:
 

Автор: Papirus 5.7.2006, 12:03
Спасибо, mr.DUDA!

Всему причиной моя тупость  - дело и впрямь оказалось в DefaultValue (=0) таблицы БД. И значений =0 оказалось там навалом. При импорте этот дефолт и сработал, а я то ориентировалсья на оригинал, где 0 просто нет. Просто так совпало, что в PreviewData первыми отображались немногие данные, где значение поля было именно NULL, а в гриде - 0.  smile  Отсюда и тихая паника... Самое прикольное, что и структуру и таблицы создавал я сам. Никто этот дефолт поставить просто не мог. А рядышком поле, где этот дефолт как раз нужен.  smile  Эт ж после которого литра пива я эту таблу делал???

Прошу извинить форумян за ложный аларм! 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)