2013-01-11 25 views
2

我在生成.rdlc報告時遇到了問題。其中一列有這樣的表達:RDLC報告沒有正確檢測到NULL值

IIF(CInt(Fields!MyColumn.Value) = 0 or Fields!MyColumn.Value is nothing,"Unknown",Fields!MyColumn.Value) 

我也嘗試使用該字段作爲一個字符串:

=IIF(IsNothing(Fields!MyColumn.Value) or Fields!MyColumn.Value is nothing,"Unknown",Fields!MyColumn.Value.ToString()) 

當MyColumn的值不是NULL,報告顯示值正常,但是當它是NULL(或者當它被轉換爲int類型時爲0)時,報告返回#Error。奇怪的是,當我刪除if函數並僅顯示該字段的值時,報告顯示0或空白(不返回錯誤)。 我該如何解決這個問題?

回答

1

你可以嘗試驗證沒有比較:(而不是檢查,如果它不存在,檢查它是否存在,)

=IIf(Fields!YourColumn.Value 
    , Fields!YourColumn.Value 
    , "Unknown") 

或逆轉你的檢查:

=IIf(Fields!YourColumn.Value > 0 
    , Fields!YourColumn.Value 
    , "Unknown") 

另外,我我不確定,但它可能與在同一列中使用不同的值類型有關。嘗試對整個列使用相同的值類型。例如,僅輸出字符串,或僅輸出整數。

如果沒有任何工作,你也可以檢查你的代碼中的NULL值,然後將值設置爲0或-1(或左右)。然後在你的RDLC報告中,你可以檢查。

+0

我試過這種方法,我仍然得到錯誤。我試圖獲取該列的類型 - 當存在值時,類型爲System.String,但是當值爲null時,它會返回#Error – NDraskovic

+0

您可以嘗試將String.Format添加到false和true輸出中嗎? '= IIf(Fields!YourColumn.Value ,String.Format(「{0}」,Fields!YourColumn.Value) ,String.Format(「{0}」,「Unknown」)' 或者,您可以在你的代碼中運行一個NULL檢查,並將值設置爲0或-1,如果是這樣,然後檢查。 – Deruijter

+0

String.Format也不起作用。有沒有辦法告訴rdlc如何顯示錯誤?像普通代碼中的try-catch這樣的東西 – NDraskovic

0

我認爲你必須之前檢查如果字段爲空或不是,否則就會在比較中得到的錯誤 -

所以,你的公式必須是(NULL大於0>錯誤?!):

=IIF(IsNothing(Fields!MyColumn.Value) or CInt(Fields!MyColumn.Value) = 0,"Unknown",Fields!MyColumn.Value) 

我也嘗試切換功能:

=Switch(
    IsNothing(Fields!MyColumn.Value), "Unknown", 
    Fields!MyColumn.Value = 0, "Unknown", 
    Fields!MyColumn.Value > 0, Fields!MyColumn.Value, 
    ) 

此外,如果你的領域已經是一個數字,你不必使用CINT(「」),否則該公式將是:

=Switch(
    IsNothing(Fields!MyColumn.Value), "Unknown", 
    CInt(Fields!MyColumn.Value) = 0, "Unknown", 
    CInt(Fields!MyColumn.Value) > 0, Fields!MyColumn.Value, 
    ) 
+0

我試過了開關功能,它沒有幫助。 IsNothing也不起作用,並且我嘗試了長度(Len(Fields!MyColumn.Value)= 0),但我仍然得到#Error。 – NDraskovic

+0

版本的VS?順便說一句,你也可以使用'沒什麼',但你必須檢查之前與int比較! –

+0

我使用VS 2010.我試過'沒有什麼'也不管用 – NDraskovic

0

根據下@ Deruijter的答覆意見,如果表達式if (dr.ItemArray.GetValue(15).ToString() == "")爲你工作沒有錯誤,那麼你的字符串不NULL;你的數據集中只有空的(即零長度)字符串。在這種情況下,在RDLC表達式中,您可以使用Len而不是IsNothingIs NothingCInt技巧。

如果這些值是真實的NULL,則只需一次IsNothing檢查即可。

還記得,使用VB .NET的RDLC表達式中的Ordoes NOT short-circuit;在VB .NET中,與C#或C一樣工作的等效短路or運算符是OrElse運算符。 (雖然這似乎並不影響你)。

1

我也遇到過這個問題。 IsNothing(Fieldname)對我很好。我正在使用C#。

+0

這不是一個答案 – MIRMIX