我有一个数据集,其中一个字段名为 "Reviewed"
。
此数据集已填充,下图显示了它的数据:
现在我试图在 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>
我收到以下错误:
Exception Details: System.InvalidCastException: Cast from type 'DBNull' to type 'Boolean' is not valid.
我做错了什么?问题是 DBNull 是从哪里来的?
================================
更新:
感谢您的精彩回答。我的主要困惑点是“愚蠢”的 XML 可视化工具错误地将已检查字段显示为已选中(如上图所示)。我检查了数据集本身的值,发现所有值确实都是 DBNUll。
最佳答案
这意味着您的某些来自数据库的数据为空。您需要在分配之前检查它。您可能想要分配一个默认值 Like。
iif((DataBinder.Eval(Container.DataItem, "Reviewed") is DbNull.Value),false, DataBinder.Eval(Container.DataItem, "Reviewed")))
您还可以创建一个方法来检查 DBNULL 和空值并返回适当的值。喜欢(它可能有语法错误,您可以更正)
<Asp:Checkbox id="Textbox5" width="40" Checked='<%# YourMethod(Eval("Reviewed")) %>' runat="server" />
关于c# - 将二进制字段绑定(bind)到 ASP.NET DataGrid 导致错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17725715/