我对如何修复错误感到有点困惑。我有一个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强制转换为其他类型。
答案 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]%'