Как избежать System.DBNull в DataTable из DataGridView при сохранении изменений?

У меня есть несколько DataGridView, каждый из которых отображает одну таблицу данных из набора данных с несколькими таблицами данных.

При добавлении новой строки в DataGridView и сохранении ее в DataSet столбцы bool имеют System.DBNull-Value, которое позже вызывает исключение (при чтении DataSet в другом приложении).

Только если флажки в моем столбце bool отмечены, а затем сняты, он имеет допустимое значение false при сохранении набора данных.

Как я могу гарантировать, что столбцы флажков всегда имеют значение по умолчанию false при добавлении их в мой DataGridView или их сохранении?


person Inno    schedule 02.12.2010    source источник


Ответы (2)


В конструкторе DataSet вы можете выбрать столбец DataTable и задать для AllowDBNull значение false, а для DefaultValue — значение False. Таким образом, значение будет ложным, а не DBNull.

person sh_kamalh    schedule 02.12.2010
comment
Установка для свойства AllowDBNull значения false не будет вставлять значение false в столбец, вместо этого оно вызовет исключение, если будет предпринята попытка вставить DBNULL. - person PedroC88; 12.11.2011

Вы используете хранимые процедуры? Если это так, вы можете установить значение по умолчанию там или установить значение по умолчанию для столбца в базе данных.

Другим путем было бы присвоение свойства DefaultValue DataTable.Column.

Вы используете свойство DefaultValue объекта DataColumn.

' Set default values. '
With myDataSet.Tables("Orders")
    .Columns("Order_Date").DefaultValue = Today
    .Columns("Quantity").DefaultValue = 1
    . . .
End With

' Add the new row. '
Dim aNewRow As DataRow = myDataSet.Tables("Orders").NewRow
myDataSet.Tables("Orders").Rows.Add(aNewRow)

Вы также можете указывать значения каждый раз, когда добавляете строку:

' Create a new row, set its values and add it. '
Dim aNewRow As DataRow = myDataSet.Tables("Orders").NewRow

With myDataSet.Tables("Orders")
    .Columns("Order_Date") = Today
    .Columns("Quantity") = 1
    . . .
    .Rows.Add(aNewRow)
End With
person clyc    schedule 02.12.2010