IsDBNull在IIf语句中

时间:2014-07-23 11:09:27

标签: vb.net

我有以下代码:

<div class="featpropv3_price"><span class="featpropv3_price_o"><%# IIf(DataBinder.Eval(Container.DataItem, "amount") <> 0, DataBinder.Eval(Container.DataItem, "currency"), "")%></span> <span class="featpropv3_price_r"><%# iif(DataBinder.Eval(Container.DataItem, "amount") <> 0,formatnumber(DataBinder.Eval(Container.DataItem, "amount"),0,0,0,-1),"POA") %></span>

我想检查它是否等于IsDBNull

我试过了:

IIf(DataBinder.Eval(Container.DataItem, "amount") <> 0 or DataBinder.Eval(Container.DataItem, "amount" IsDBNull.

我想要做的是,如果它是0或IsDBNull我想要显示POA。

编辑:

我想我需要这样的东西:

<%# IIf(Not IsDBNull(DataBinder.Eval(Container.DataItem, "amount")),  if( DataBinder.Eval(Container.DataItem, "amount") <> 0, DataBinder.Eval(Container.DataItem, "currency"), "")%>

2 个答案:

答案 0 :(得分:1)

您的问题是您正在使用IIF。 IIF是一个函数,它接受三个参数并返回一个 - 它对于避免空的derefernce非常有用。您应该使用VB2008引入的IF运算符。 IF运算符是一个实际的运算符,它不会评估&#34; false&#34;分支,除非有必要。

答案 1 :(得分:0)

您应该使用IsDBNull功能。并使用AndAlso确保短路评估

<div class="featpropv3_price">
    <span class="featpropv3_price_o">
        <%# IIf(Not IsDBNull(DataBinder.Eval(Container.DataItem, "amount")) AndAlso DataBinder.Eval(Container.DataItem, "amount") <> 0, DataBinder.Eval(Container.DataItem, "currency").ToString(), "")%>
     </span> 
    <span class="featpropv3_price_r">
        <%# iif(Not IsDBNull(DataBinder.Eval(Container.DataItem, "amount")) AndAlso DataBinder.Eval(Container.DataItem, "amount") <> 0, formatnumber(DataBinder.Eval(Container.DataItem, "amount").ToString(),0,0,0,-1),"POA") %>
    </span>

更新:

调用ToString()是因为(与C#中的:?不同,VB&#39; Iif是一个函数,运行时应该在传递它们之前评估所有参数,如果你不&# 39;致电ToString(),您将在第二个InvalidCastException上获得Iif

更新2:

行。我只用If:

重写了它
<div class="featpropv3_price">
    <span class="featpropv3_price_o">
        <%If Not IsDBNull(DataBinder.Eval(Container.DataItem, "amount")) AndAlso DataBinder.Eval(Container.DataItem, "amount") <> 0 Then%>
            <%# DataBinder.Eval(Container.DataItem, "currency")%>
        <% Else %>
            <%= ""%>
        <% End If%>
     </span> 
    <span class="featpropv3_price_r">
        <% If Not IsDBNull(DataBinder.Eval(Container.DataItem, "amount")) AndAlso DataBinder.Eval(Container.DataItem, "amount") <> 0%>
            <%# formatnumber(DataBinder.Eval(Container.DataItem, "amount").ToString(),0,0,0,-1)%>
        <% Else %>
            <%= "POA" %>
        <%End If%>
    </span>