尝试向数字添加逗号时出现DBNull错误

时间:2013-12-12 23:48:15

标签: c# asp.net sql gridview literals

我对如何修复错误感到有点困惑。我有一个gridview,其中包含一系列数字(它们在数据库中出现的样式如下),我想添加逗号。我试图在ASP代码中使用文字(下面的代码)完成此操作。与下面的内容相关联的表允许调用foo,列名称称为“count”。没有TemplateField和文字(如下所示),gridview工作正常。但是,当我在下面添加TemplateField时,我得到一个'对象无法从DBNull转换为其他类型'。来自浏览器。我所要做的就是让gridview输出在ASP代码而不是数据库中显示逗号。

我尝试了什么:

首先我认为可能会有一些奇怪的字符,尾随空格或类似的东西所以我运行了以下命令:

select * from foo where count not like '%[^0-9]%'

只返回表中的每个条目。我手动检查了一些结果,并且我想要添加逗号的列中没有任何尾随空格或奇数字符。

我很难接受下一步的尝试,因为我已经能够在我的测试服务器上使用它而不是在生产中。

专栏示例

计数

2345342
4356546个
3245234534个
67465745675
43523452345
546234523452345个
32452345个
4352345234个
4352345个
345234个

当我们从各种来源导入数据时,这些数据以NVARCHAR(MAX)的形式输入数据库(允许空值)。

代码

   <asp:TemplateField HeaderText="Count" SortExpression="count">
        <EditItemTemplate>
            <asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("count") %>'></asp:TextBox>
        </EditItemTemplate>
        <ItemTemplate>
            <asp:Literal ID="Literal1" runat="server" Text='<%# string.Format("{0:N0}", Convert.ToDecimal(Eval("count"))) %>'>
            </asp:Literal>
        </ItemTemplate>
        <HeaderStyle BackColor="#6699FF" />
    </asp:TemplateField>

错误

无法将对象从DBNull强制转换为其他类型。

2 个答案:

答案 0 :(得分:1)

我猜你某处有空,如果你试图在模板中将其转换为十进制,你就会得到那个错误。你需要放一些代码来禁止它。

string.Format("{0:N0}", Convert.ToDecimal(Eval("count")==DBNull.Value ? "0" : Eval("count")))

答案 1 :(得分:1)

您是否在查询中考虑了包含带有IsNull的空值的列。在数据库中解决问题

从foo中选择*,isnull([count],0),其中count不像'%[^ 0-9]%'