0

我遇到了一个让我发疯的问题,我不确定是不是我愚蠢

我有一个数据表,我在其中添加了一个布尔列

  ds.Tables(0).Columns.Add(New DataColumn("Select", System.Type.GetType("System.Boolean")))
  ds.Tables(0).Columns("Select").ReadOnly = False
  ds.Tables(0).Columns("Select").DefaultValue = False
  ds.Tables(0).Columns("Select").SetOrdinal(0)

然后我遍历它并检查该列是否具有真值位我在表达式的 Convert.ToBoolean 部分收到错误“未找到类型'Boolean'的公共成员'值'”

For Each dr As DataRow In Categories.Tables(0).Rows
  If dr("Select").value IsNot Nothing AndAlso (Not IsDBNull(dr("Select").value)) AndAlso Convert.ToBoolean(dr("Select")) = True Then
      'Do Something
  End If
Next
4

2 回答 2

2

那不是你的问题所在。您的问题出现在声明的开头If。索引器返回的类型是Object,它没有value属性或字段。你真的只想这么说:

If dr("Select") IsNot Nothing ...

但是这个条件永远不会是假的,因为 NULL 是由DBNull实例表示的。相反,请使用以下If语句:

If Not dr.IsNull("Select") AndAlso Convert.ToBoolean(dr("Select")) Then

要更VB,你也可以这样做

If Not dr.IsNull("Select") AndAlso CBool(dr("Select")) Then

而且,对于 Tim 的回答借款人,您可以使用Field()扩展方法(请参阅:http: //msdn.microsoft.com/en-us/library/system.data.datarow.field (v=vs.90).aspx )像这样:

If If(dr.Field(Of Boolean?)("Select"), False) Then

也许这太聪明了,但它完成了工作。

于 2013-03-10T22:24:34.313 回答
2

A DataRoworObject没有value财产。

请改用强类型Field扩展方法:

For Each dr As DataRow In Categories.Tables(0).Rows
    Dim isSelected As Boolean? = dr.Field(Of Boolean?)("Select")
    If isSelected.HasValue AndAlso isSelected Then
        'Do Something
    End If
Next

它还支持Nullable(Of Boolean)上述可为空的类型。

如果您低于 .NET 3.5,则必须手动转换:

For Each dr As DataRow In Categories.Tables(0).Rows
    If Not dr.IsNull("Select") AndAlso DirectCast(dr("Select"), Boolean) Then
        'Do Something
    End If
Next
于 2013-03-10T22:27:20.477 回答