【问题标题】:Conversion from type 'DBNull' to type 'String' is not valid. clickable data从“DBNull”类型到“String”类型的转换无效。可点击数据
【发布时间】:2015-08-17 07:29:58
【问题描述】:

我是 aspx 编程的新手。我面临的问题是我获取的数据包含空值。 我的代码:

<asp:TemplateField HeaderText="NCRE" ItemStyle-Width="150px" >
    <ItemTemplate>
        <asp:Hyperlink ID="Hyperlink1" runat="server"  Text='<%# Eval("formid") %>' NavigateUrl='<%# Eval("formid","~/sapphire/ncrr" + Mid(Eval("formid"), 4, 1) + ".aspx?formid={0}") %>' />
    </ItemTemplate>
</asp:TemplateField>

还有我的代码:

Protected Function geturl(value As Object) As String
    Dim NCRE As String = Convert.ToString("formid")
    If Mid(NCRE, 4, 1) = 2 Then
        Return ("~/sapphire/ncrr2.aspx")
    Else
        Return ("~/sapphire/ncrr1.aspx")
    End If
End Function

【问题讨论】:

  • 您的数据从何而来?
  • 数据库表名ncrrtb
  • 还有...一些 SQL 语句?
  • 我用gridview把数据拉出来显示在table上
  • @JoeCheong 您可以使用 SQL 中的 COALESCE 函数将 NULL 更改为其他值,例如SELECT col1, col2, COALESCE(col3, 'text to say it is blank') FROM ....

标签: asp.net vb.net


【解决方案1】:

为了帮助您从the post I've linked 获得正确的代码:

将此部分复制到您的代码文件中(以aspx.cs 结尾):

Public Function ProcessMyDataItem(myValue As Object) As String
    If myValue Is Nothing OrElse myValue = DbNull.Value Then
        Return "(no value)"
    End If

    Return myValue.ToString()
End Function

在你的.aspx:

<asp:TemplateField HeaderText="NCRE" ItemStyle-Width="150px" >
    <ItemTemplate>
        <asp:Hyperlink ID="Hyperlink1" runat="server"  Text='<%# ProcessMyDataItem(Eval("formid")) %>' NavigateUrl='<%# Eval("formid","~/sapphire/ncrr" + Mid(ProcessMyDataItem(Eval("formid")), 4, 1) + ".aspx?formid={0}") %>' />
    </ItemTemplate>
</asp:TemplateField>

【讨论】:

  • @PatrickHofman 原始答案的语言有误。根据更新删除。
【解决方案2】:

您可以使用IIf (IIf(IsDBNull(Eval("fieldName")) = True, *do what You want when record is empty*, *do what You want when record isn't empty))。

有例子:

Text = '&lt;%# IIf(IsDBNull(Eval("formid")) = True, "no data", Eval("formid))%&gt;'

NavigateUrl 可以使用相同的代码:

NavigateUrl = '&lt;%# IIf(IsDBNull(Eval("formid")) = True, "#", Eval("formid","~/sapphire/ncrr" + Mid(Eval("formid"), 4, 1) + ".aspx?formid={0}"))'

然后,在你的函数geturl(代码后面)中,首先检查的是value,例如#(什么都不做,或者只是返回空),否则执行代码。

【讨论】:

  • 您可能对If Operator感兴趣。
  • @AndrewMorton 是的,If 也可以使用。
  • 重载解析失败,因为没有可访问的 'IIf' 接受此数量的参数。我收到此错误 >
  • @JoeCheong 我建议你忘记你曾经听说过“Iif”。它有gotchas
【解决方案3】:

您只能添加一个空字符串以避免错误:

Dim NCRE As String = Convert.ToString("formid") & ""

或者,为了避免在第 4 位出现错误:

Dim NCRE As String = Convert.ToString("formid") & " "

【讨论】:

    猜你喜欢
    • 2014-06-10
    • 1970-01-01
    • 1970-01-01
    • 2012-08-03
    • 2023-03-07
    • 2015-06-07
    • 1970-01-01
    • 2012-11-19
    • 2011-10-05
    相关资源
    最近更新 更多