2009-08-27 45 views
1

我有一個RDLC報告,我直接以PDF形式呈現給響應流(而不是使用ReportViewer)。在呈現報表的代碼中,DataSource綁定到定製程序集中定義的List(Of ClassA)對象。這似乎大部分工作。我的問題是,我似乎無法處理嵌套對象爲空的情況。例如,給定ClassA和ClassB的(嵌套對象)的定義如下:如何處理綁定到自定義組裝對象數據源的RDLC報表中的空嵌套對象?

Public Class ClassA 
     Public Id As Integer 
     Public Name As String 
     Public TheNestedObject As ClassB 
    End Class 

    Public Class ClassB 
     Public Id As Integer 
     Public Name As String 
     Public TheParentObject As ClassA 
    End Class 

每當我嘗試有條件地顯示一個「N/A」,如果B類是在我的表達空如下:

=IIf(IsNothing(Fields!TheNestedObject.Value,"n/a", Fields!TheNestedObject.Value.Name)) 

如果TheNestedObject爲空,則報告顯示「#Error」。如果TheNestedObject不爲null,則它會正確顯示名稱。

我在這裏做錯了什麼?

謝謝!

回答

1

iif函數計算所有參數,從而計算Fields!TheNestedObject.Value.Name被計算並給出錯誤,因爲Fields!TheNestedObject.Value爲null。

我最終在報告中添加了一些自定義代碼。它在報告屬性 - >代碼選項卡下。

Public Function GetName(ByRef obj As Object) As String 
    If obj Is Nothing Then 
     Return "n/a" 
    Else : Return obj.Name 
    End If 
End Function 

然後你的文本框表達式爲:

=Code.GetName(Fields!TheNestedObject.Value) 

該函數返回「N/A」時,它的空當它不是Name屬性。

0

我不知道知道如何解決您的問題,但我有一對夫婦的建議...

  1. 或許,如果你改變了你的IIF語句是:

    IIf(IsNothing(Fields!TheNestedObject,"n/a", Fields!TheNestedObject.Value.Name)) 
    

    IIf總是評估所有參數,因此它試圖評估TheNestedObject。值。如果TheNestedObjectNULLNOTHING,那麼我不會驚訝地發現它會拋出一個錯誤。

  2. 另一個想法是修改您的構造函數,以便在沒有「B」時添加一個「空」的「B」對象。例如,A.TheNestedObject將指向一個沒有數據的「B」對象。 B.Id將爲0(默認情況下),除非您將其設爲可空的Int。 B.Name將是「」。等等

0
=iif(First(Fields!model.Value, "model") Is Nothing, "value is NULL", "value is not NULL")