绑定到详细信息视图控件中的复选框时将 DBNull 转换为布尔值

发布于 2024-12-19 23:26:14 字数 968 浏览 2 评论 0原文

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

 </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。人们可能会认为有一种简单的方法来处理这个问题,但我很不幸找到了一种方法。

This is kind of silly but I have a DetailsView that binds to a record in my database using a sqlDataSource. My problem is that the field I'm binding to is a bit field, (i,e 1 or 0) that at present allows nulls. I realize this needs to change but I also need to be able to handle DBNulls on the GUI side so that the application automatically knows to set the Checked property of the checkbox to "false" if the value is DBNull. At present my template field looks like this.

 </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>

Everything works fine in View mode but when I click the Edit link on the details view control I get the following error:

Object cannot be cast from DBNull to other types.

Any suggestions?

Update:

I need to use 2 way binding through Bind() instead of Eval() as the details view performs an update to the selected record. If i use Convert.ToBoolean() with Bind an exception will be cast. I may end up using a CheckboxField. One would think that there would be an easy way to handle this but I have been unlucky inf finding one.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

物价感观 2024-12-26 23:26:14

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

Eval("isCar") == DBNull.Value ? false : Convert.ToBoolean(Eval("isCar"))

You could try a conditional to check for DBNull.Value:

Eval("isCar") == DBNull.Value ? false : Convert.ToBoolean(Eval("isCar"))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文