从类型转换为DBNull'输入' String'无效。可点击的数据

时间:2015-08-17 07:29:58

标签: asp.net vb.net

我是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

3 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

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

有例子:

Text = '<%# IIf(IsDBNull(Eval("formid")) = True, "no data", Eval("formid))%>'

相同的代码您可以使用NavigateUrl

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

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

答案 2 :(得分:0)

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

Dim NCRE As String = Convert.ToString(&#34; formid&#34;)&amp; &#34;&#34;

或者,为避免在第4位发生错误:

Dim NCRE As String = Convert.ToString(&#34; formid&#34;)&amp; &#34; &#34;