当绑定到detailsview控件中的复选框时,将DBNull转换为布尔值

本文关键字:DBNull 转换 布尔值 复选框 绑定 detailsview 控件 | 更新日期: 2023-09-27 18:17:22

这是一种愚蠢的,但我有一个DetailsView绑定到一个记录在我的数据库使用sqlDataSource。我的问题是,我绑定的字段是位字段,(I,e 1或0),目前允许为空。我意识到这需要改变,但我还需要能够在GUI端处理DBNull,以便应用程序自动知道将复选框的Checked属性设置为"false",如果值为DBNull。目前,我的模板字段是这样的:

 </asp:TemplateField>
   <asp:TemplateField HeaderText="Car:" HeaderStyle-Width="15%" ItemStyle-Width="85%">
  <ItemTemplate>
    <asp:Label ID="lblIsCar" runat="server" Text='<%#  Eval("isCar") %>' />
  </ItemTemplate>
  <EditItemTemplate>
    <asp:CheckBox ID="ckIsCar" runat="server"  Checked='<%#  Convert.ToBoolean(Eval("isCar"))%>' />
  </EditItemTemplate>
</asp:TemplateField>

在视图模式下一切正常,但当我点击细节视图控件上的编辑链接时,我得到以下错误:

对象不能从DBNull强制转换为其他类型。

有什么建议吗?

更新:

我需要通过Bind()而不是Eval()使用2路绑定,因为详细信息视图对所选记录执行更新。如果我将Convert.ToBoolean()与Bind一起使用,则会强制转换异常。我最终可能会使用CheckboxField。有人会认为会有一个简单的方法来处理这个问题,但我很不幸地找到了一个。

当绑定到detailsview控件中的复选框时,将DBNull转换为布尔值

您可以尝试使用条件来检查DBNull.Value:

Eval("isCar") == DBNull.Value ? false : Convert.ToBoolean(Eval("isCar"))
相关文章: