【问题标题】:How to avoid System.DBNull in DataTable from DataGridView when saving changes?保存更改时如何避免 DataGridView 中的 DataTable 中的 System.DBNull?
【发布时间】:2011-05-19 04:50:45
【问题描述】:

我有一些 DataGridViews,每个 DataGridViews 显示来自具有多个 DataTables 的 DataSet 中的一个 DataTable。

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

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

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

【问题讨论】:

    标签: .net datagridview dataset datatable default-value


    【解决方案1】:

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

    另一种方法是分配 DataTable.Column 的 DefaultValue 属性

    您使用 DataColumn 对象的 DefaultValue 属性。

    ' 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
    

    【讨论】:

      【解决方案2】:

      在 DataSet 设计器中,您可以选择一个 DataTable 列并将 AllowDBNull 设置为 false 并将 DefaultValue 设置为 False。这样,该值将是 false 而不是 DBNull。

      【讨论】:

      • AllowDBNull 属性设置为 false 不会在列中插入 false 值,而是在尝试插入 DBNULL 时抛出异常。
      猜你喜欢
      • 2016-07-28
      • 1970-01-01
      • 2023-03-11
      • 2017-09-26
      • 2023-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多