将二进制字段绑定到ASP.NET DataGrid会导致错误

时间:2013-07-18 14:04:54

标签: c# asp.net vb.net datagrid

我有一个数据集,其中一个字段名为"Reviewed"

这个数据集是populted,下面的图片显示了它的数据: enter image description here

现在我试图在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。

2 个答案:

答案 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