0

DBからプログラムで埋められたGridViewがあります(SqlDataSourceなどではありません)。テキストの書式を設定すると、TemplateFields である 4 つの列があります。それらは日付と時刻であり、これはそれらの TemplateField の 1 つです。

<ItemTemplate>
     <asp:Label ID="Label1" Text='<%# FormatDate(Eval("tDate")) %>' runat="server"></asp:Label>
</ItemTemplate>

これは、その日付をフォーマットする関数です。

Function FormatDate(objTime As Object) As String
    Dim d As String
    If objTime.Equals(DBNull.Value) Then
        d = ""
    Else
        d = Convert.ToDateTime(objTime).ToString("MM-dd-yyyy")
    End If
    Return d
End Function

iTextSharp を使用して GridView を PDF に変換するために、これからVB コードに変換されたこの投稿のメソッドを使用しています。

私の問題は、GridView データを PDF (For ループ内) に追加するときに、ここで Null 参照例外が発生することです。

Dim lc As DataBoundLiteralControl = TryCast(gvReport.Rows(rowNo).Cells(colNo).Controls(0), DataBoundLiteralControl)
s = lc.Text.Trim()

この If ステートメントを削除して、ここで Else 部分を実行すると、次のようになります。

s = gvReport.Rows(rowNo).Cells(colNo).Text.Trim()
ph = New Phrase(s, FontFactory.GetFont("Arial", ReportTextSize, iTextSharp.text.Font.NORMAL))
mainTable.AddCell(ph)

これらの日付/時刻列は PDF では空として表示されますが、他のすべての列は問題なく表示されます。

この問題を解決する方法に非常に迷っており、オンラインで解決策を見つけることができませんでした。

4

1 に答える 1

0

上記でフォローアップしていた解決策を修正することはできませんでしたが、TemplateFieldからデータにアクセスする別の方法を見つけました。

Dim s As String = CType(gvReport.Rows(rowNo).FindControl("Label1"), Label).Text

これにより、指定した列のデータにアクセスできます。ここで、行を反復処理して、さまざまなTemplateFieldのそれぞれを取得する方法を理解する必要があります。これには、おそらくForループとSelectCaseステートメントの作り直しが含まれます。

于 2012-06-25T18:08:18.920 に答える