如何在保存更改时从DataGridView避免DataTable中的System.DBNull?

问题描述:

我有一些DataGridViews每个显示DataTable从一个DataSet与多个DataTables。如何在保存更改时从DataGridView避免DataTable中的System.DBNull?

向DataGridView添加新行并将其保存到DataSet时,bool列具有System.DBNull-Value,稍后会导致异常(在其他应用程序中读取DataSet时)。

只有当我的bool列中的复选框被选中然后取消选中时,它在保存DataSet时的有效值为false。

我该如何确保,复选框列在添加到我的DataGridView或保存它们时始终具有默认值false?

在DataSet设计器,你可以选择一个数据表列,设置AllowDBNull为false,默认值设置为False。这样该值将是错误的而不是DBNull。

+0

将`AllowDBNull`属性设置为false不会向列中插入一个假值,而是会在尝试插入`DBNULL`时引发异常。 – PedroC88 2011-11-12 07:28:35

您是否正在使用存储过程?如果是这样,您可以在那里设置默认值或为数据库中的列设置默认值。

另一条路线是对的DataTable.Column

您使用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