c# - 将二进制字段绑定(bind)到 ASP.NET DataGrid 导致错误

标签 c# asp.net vb.net datagrid

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

此数据集已填充,下图显示了它的数据: 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>

我收到以下错误:

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/

相关文章:

c# - WCF Stream.Read 始终在客户端返回 0

c# - 如何获取字符串中除第一个单词以外的所有单词

javascript - 如何在页面加载时设置 jquery 切换关闭?

.net - 基本字符串比较中完全奇怪的行为

c# - H结果 : 0xC00CE556 - Loading string to XML

c# - 从 Request.Files 中删除文件

c# - 在 web.config 中保留敏感信息

c# - 在 asp.net 中单击按钮浏览到文件

vb.net - 如何限制并发异步网络请求

vb.net - 对非共享成员的引用需要在调用公共(public)子时发生对象引用