1

(ReportViewer を使用するのではなく) PDF として応答ストリームに直接レンダリングしている RDLC レポートがあります。レポートを表示するコードでは、その DataSource は、カスタム アセンブリで定義された List(Of ClassA) オブジェクトにバインドされます。これはほとんどの場合うまくいくようです。私の問題は、ネストされたオブジェクトが null である状況を処理できないように見えることです。たとえば、ClassA と ClassB (ネストされたオブジェクト) が次のように定義されているとします。

    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

次のように、式でクラス B が null の場合、条件付きで「N/A」を表示しようとするたびに:

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

TheNestedObject が null の場合、レポートには「#Error」が表示されます。TheNestedObject が null でない場合、名前が正しく表示されます。

ここで何が間違っていますか?

ありがとう!!!

4

4 に答える 4

1

iif関数はすべての引数を評価するため、Fields!TheNestedObject.Value.Valueがnullであるため、Fields!TheNestedObject.Value.Nameが評価され、エラーが発生します。

レポートにカスタムコードを追加することになりました。レポートのプロパティ->コードタブの下にあります。

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)

この関数は、nullの場合は「n / a」を返し、nullでない場合はNameプロパティを返します。

于 2009-11-11T23:05:12.723 に答える
0

問題を解決する方法はわかりませんが、いくつか提案があります...

  1. おそらく、IIFステートメントを次のように変更した場合:

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

    IIf常にすべての引数を評価するため、TheNestedObject.Valueを評価しようとしています。TheNestedObjectNULLまたはの場合NOTHING、エラーがスローされるのを見て驚かないでしょう。

  2. もう1つのアイデアは、コンストラクターを変更して、「B」がない場合は常に「空の」「B」オブジェクトを追加することです。たとえば、A.TheNestedObjectデータのない「B」オブジェクトを指します。 B.Idnull許容のIntにしない限り、(デフォルトでは)0になります。 B.Nameだろう ""。等。

于 2009-10-27T20:18:24.540 に答える