【问题标题】:Convert a gridview templatefield to pdf iTextSharp将 gridview 模板字段转换为 pdf iTextSharp
【发布时间】:2012-06-25 05:50:50
【问题描述】:

我有一个 GridView,它是从数据库(不是 SqlDataSource 等)以编程方式填充的。当我格式化它们的文本时,有 4 列是 TemplateFields。它们是日期和时间,这是它们的 TemplateField 之一:

<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

我一直在使用 Post 中的方法,该方法从 this 转换为 VB 代码,以使用 iTextSharp 将 GridView 转换为 PDF。

我的问题是,在将 GridView 数据添加到 PDF(在 For 循环内)时,我在这里遇到空引用异常:

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 中显示为空,而所有其他列显示没有问题。

我对如何解决这个问题非常迷茫,并且在网上找不到解决方案。

【问题讨论】:

    标签: asp.net vb.net gridview itextsharp templatefield


    【解决方案1】:

    虽然我无法修复上面跟进的解决方案,但我找到了一种从 TemplateField 访问数据的不同方法:

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

    这使我可以访问指定列中的数据。现在我只需要找出一种方法遍历行并获取每个不同的 TemplateFields,这可能涉及重新处理我的 For 循环和 Select Case 语句。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-01
      • 2018-01-30
      • 2016-10-28
      • 2022-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多