1

我有一个数据集,其中一个名为"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>

我收到以下错误:

异常详细信息:System.InvalidCastException:从“DBNull”类型转换为“Boolean”类型无效。

我做错了什么?问题是 DBNull 来自哪里?

=================================

更新:

谢谢你的好答案。我的主要困惑是“STUPID”XML 可视化工具错误地将已审核字段显示为已选中(如上图所示)。我检查了数据集中的值,发现确实都是 DBNUll。

4

2 回答 2

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" />
于 2013-07-18T14:06:59.747 回答
2

尝试将您的标记代码更改为此代码。

<asp:Checkbox 
  Checked='<%# (Eval("reviewed")==DBNull.Value ? false : Eval("reviewed"))%>' 
  runat="server" ID="Label22" />

因此,如果有 DBNull,则不要将 nullValue 绑定到布尔属性,而是分配 false 。学分去limno

于 2013-07-18T14:10:05.413 回答