我有一个数据集,其中一个字段名为"Reviewed"
。
这个数据集是populted,下面的图片显示了它的数据:
现在我试图在DataGrid中显示这个数据集:
<ASP:TemplateColumn HeaderText="Reviewed" HeaderStyle-HorizontalAlign="center" HeaderStyle-Wrap="True">
<ItemStyle Wrap="false" HorizontalAlign="center" />
<ItemTemplate>
<ASP:Checkbox Checked='<%# DataBinder.Eval(Container.DataItem, "Reviewed") %>' runat="server" ID="Label22" />
</ItemTemplate>
<EditItemTemplate>
<Asp:Checkbox id="Textbox5" width="40" Checked='<%# DataBinder.Eval(Container.DataItem, "Reviewed") %>' runat="server" />
</EditItemTemplate>
</ASP:TemplateColumn>
我收到以下错误:
异常详细信息:System.InvalidCastException:从类型转换 键入'Boolean'的'DBNull'无效。
我做错了什么?问题是DBNull来自哪里?
================================
更新
感谢您的回答。我的主要困惑点是“STUPID”XML可视化工具错误地将已审核的字段显示为已选中(如上图所示)。我检查了数据集本身的值,并意识到所有的确都是DBNUll。
答案 0 :(得分:2)
这意味着来自数据库的一些数据为空。您需要在分配之前检查它。您可能想要分配默认值Like。
iif((DataBinder.Eval(Container.DataItem, "Reviewed") is DbNull.Value),false, DataBinder.Eval(Container.DataItem, "Reviewed")))
您还可以创建一个检查DBNULL和null值的方法,并返回适当的值。喜欢(它可能有语法错误,你可以纠正)
<Asp:Checkbox id="Textbox5" width="40" Checked='<%# YourMethod(Eval("Reviewed")) %>' runat="server" />
答案 1 :(得分:2)
尝试将标记代码更改为此代码。
<asp:Checkbox
Checked='<%# (Eval("reviewed")==DBNull.Value ? false : Eval("reviewed"))%>'
runat="server" ID="Label22" />
因此,如果没有将nullValue绑定到布尔属性,则如果存在DBNull 则指定false。积分转至limno