Home » Создание сайтов и программирование » DataGridView – свойства NullValue и DataSourceNullValue

DataGridView – свойства NullValue и DataSourceNullValue

Как известно, в составе Visual Studio 2005 появился новый элемент управления – DataGridView, который, в отличие от просто DataGrid, обладает неплохой функциональностью и позволяет во многих случаях обойтись без сторонних компонентов, при этом не дописывая кучу кода.

Вот и мы используем его в своих проектах. В одном из них ввод и редактирование данных осуществляется непостредственно в самом DataGridView. Одна из возникших сложностей заключалась в особенностях работы со значениями null и DBNull.Value. Как раз для этого предназначены свойства NullValue и DataSourceNullValue.

Свойство NullValue позволяет задать значение, которое будет отображаться в ячейке, свойство Value которой содержит null или DBNull.Value. По умолчанию, для текстовых ячеек это свойство равно String.Empty. Свойство NullValue работает и в обратную сторону – при парсинге введенного в ячейку значения. Таким образом, при удалении содержимого ячейки, в источник данных запишется не пустая строка, а значение DBNull.Value. Если соответствующее поле источника данных не позволяет вносить значение NULL, произойдет ошибка.

Чтобы этого избежать, можно использовать другое свойство – DataSourceNullValue. Это свойство позволяет задать значение, которое будет отправлено источнику данных при помещении пользователем в ячейку null-значения. Т.е. в нашем случае свойству DataSourceNullValue надо присвоить значение String.Empty. Тогда, при очистке ячейки, в источник данных будет записываться пустая строка.

Подробное описание контрола DataGridView на русском:

DataGridView. Новый контрол в составе Framework 2.0
DataGridView. Новый контрол в составе Framework 2.0. Часть 2.

  • gro

    Забавно, что когда в источник данных через DataGridViewComboBoxColumn надо впихнуть как раз DBNull.Value, по-человечески – через Ctrl+0 – это не сделаешь. Никакой DataSourceNullValue не помогает, изволь заводить в комбо лишнюю строку с нуллом.

  • Sergiy Oliynyk

    На то он и ComboBox, чтобы ничего другого нельзя было ввести.
    А Ctrl+0 – это не совсем по человечески: никто, кроме программистов не догадается нажать.
    Так что с дополнительной строкой как раз нормально выходит.

  • gro

    Да глюк это, а не фича. Ругается-то при этом именно на то, что якобы null пытаешься впихнуть, а не DBNull.Value. Значит, надо еще и Ctrl+0 запрещать.
    Хорошая вещь DataGridView, да недоделанная.

  • Vic

    DataTime column c NULL не пробовали в DataGridView запихать?

    Это полный писец – никогда не думад, что столько страждущих не могут этого сделать (запрос Google DateTimePicker NULL :)
    Я убил на это 2 дня.

    Последовательность действий:

    1) Прицепить к общеизвестному примеру
    http://msdn.microsoft.com/en-us/library/7tas5c80.aspx

    ‘magic touch’ отсюда
    http://www.dotnet247.com/247reference//msgs/45/229021.aspx

    2) поправить код примера

    CalendarEditingControl.cs:
    —————————
    class CalendarEditingControl : DatePicker, IDataGridViewEditingControl
    {

    CalendarCell.cs:
    —————-
    public class CalendarCell : DataGridViewTextBoxCell
    {

    public override void InitializeEditingControl(int rowIndex, object
    initialFormattedValue, DataGridViewCellStyle dataGridViewCellStyle)
    {
    // Set the value of the editing control to the current cell value.
    base.InitializeEditingControl(rowIndex, initialFormattedValue,
    dataGridViewCellStyle);
    CalendarEditingControl ctl =
    DataGridView.EditingControl as CalendarEditingControl;

    // ++ vic 14-aug-2009
    if (this.Value != System.DBNull.Value)
    ctl.Value = (DateTime)this.Value;
    }

    DatePicker.cs (переименованный DateTimePicker bp Net247):
    ———————————————————
    Добавить
    public string ToShortDateString()
    {
    if (!realDate)
    return String.Empty;
    else
    {
    DateTime dt = (DateTime)Value;
    return dt.ToShortDateString();
    }
    }

    Виктор

    Now they’ve found me
    At last they’ve found me..
    Elton John / Bernie Taupin

  • Vic

    Ps
    Обнуление datetime поля по DEL клавише.
    Это и была сверхзадача
    Тестилось на Oracle БД