vb.net 如何从datagridview 导出pdf

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/44038267/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-17 20:17:04  来源:igfitidea点击:

vb.net how to export pdf from datagridview

vb.netpdfdatagridview

提问by tang

i manage to link the mssql get the data and generate to pdf. But now i have a problem in i only can get my sql database header row, others data row cannot be show. any suggestion to solve this problem. Sorry for my english ,hope can uderstand my question.

我设法链接 mssql 获取数据并生成为 pdf。但是现在我有一个问题,我只能得到我的 sql 数据库标题行,其他数据行无法显示。任何解决这个问题的建议。对不起我的英语,希望能理解我的问题。

this is my code

这是我的代码

Public Class Form1
Dim sCommand As SqlCommand
Dim sAdapter As SqlDataAdapter
Dim sBuilder As SqlCommandBuilder
Dim sDs As DataSet
Dim sTable As DataTable

Private Sub load_btn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles load_btn.Click
    Dim connectionString As String = "Server= SHQN080-0116; Database= HKT ;Integrated Security=SSPI;"
    Dim sql As String = "SELECT * FROM SalArea"
    Dim connection As New SqlConnection(connectionString)
    connection.Open()
    sCommand = New SqlCommand(sql, connection)
    sAdapter = New SqlDataAdapter(sCommand)
    sBuilder = New SqlCommandBuilder(sAdapter)
    sDs = New DataSet()
    sAdapter.Fill(sDs, "SalArea")
    sTable = sDs.Tables("SalArea")
    connection.Close()
    DataGridView1.DataSource = sDs.Tables("SalArea")
    DataGridView1.ReadOnly = True
    save_btn.Enabled = False
    DataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect

End Sub
Private Sub export_btn_Click(sender As System.Object, e As System.EventArgs) Handles export_btn.Click
    Dim pdfTable As New PdfPTable(DataGridView1.ColumnCount)
    pdfTable.DefaultCell.Padding = 3
    pdfTable.WidthPercentage = 30
    pdfTable.HorizontalAlignment = Element.ALIGN_LEFT
    pdfTable.DefaultCell.BorderWidth = 1

    'Adding Header row
    For Each column As DataGridViewColumn In DataGridView1.Columns
        Dim cell As New PdfPCell(New Phrase(column.HeaderText))
        cell.BackgroundColor = New iTextSharp.text.Color(240, 240, 240)
        pdfTable.AddCell(cell)
    Next

    'Adding DataRow
    For Each row As DataGridViewRow In DataGridView1.Rows
        For Each cell As DataGridViewCell In row.Cells
            pdfTable.AddCell(cell.Value.ToString())
        Next
    Next

    'Exporting to PDF
    Dim folderPath As String = "C:\PDFs\"
    If Not Directory.Exists(folderPath) Then
        Directory.CreateDirectory(folderPath)
    End If
    Using stream As New FileStream(folderPath & "DataGridViewExport.pdf", FileMode.Create)
        Dim pdfDoc As New Document(PageSize.A2, 10.0F, 10.0F, 10.0F, 0.0F)
        PdfWriter.GetInstance(pdfDoc, stream)
        pdfDoc.Open()
        pdfDoc.Add(pdfTable)
        pdfDoc.Close()
        stream.Close()
    End Using
End Sub

End Class

结束班

回答by Shane

Sorry for the late reply, I hope this helps someone. The error in the code is that you are referencing the .value property of the cell, when you should be referencing the .formattedvalue of the cell. Here is the code

抱歉回复晚了,希望对大家有所帮助。代码中的错误是您引用了单元格的 .value 属性,而您应该引用单元格的 .formattedvalue。这是代码

Dim pdfTable As New PdfPTable(DataGridView1.ColumnCount)
    pdfTable.DefaultCell.Padding = 3
    pdfTable.WidthPercentage = 30
    pdfTable.HorizontalAlignment = Element.ALIGN_LEFT
    pdfTable.DefaultCell.BorderWidth = 1

    'Adding Header row
    For Each column As DataGridViewColumn In DataGridView1.Columns
        Dim cell As New PdfPCell(New Phrase(column.HeaderText))
        cell.BackgroundColor = New iTextSharp.text.BaseColor(240, 240, 240)
        pdfTable.AddCell(cell)
    Next

    'Adding DataRow
    Dim cellvalue As String = ""
    Dim i As Integer = 0
    For Each row As DataGridViewRow In DataGridView1.Rows
        For Each cell As DataGridViewCell In row.Cells
            cellvalue = cell.FormattedValue
            pdfTable.AddCell(Convert.ToString(cellvalue))
        Next
    Next

    'Exporting to PDF
    Dim folderPath As String = "C:\PDFs\"
    If Not Directory.Exists(folderPath) Then
        Directory.CreateDirectory(folderPath)
    End If
    Using stream As New FileStream(folderPath & "DataGridViewExport.pdf", FileMode.Create)
        Dim pdfDoc As New Document(PageSize.A2, 10.0F, 10.0F, 10.0F, 0.0F)
        PdfWriter.GetInstance(pdfDoc, stream)
        pdfDoc.Open()
        pdfDoc.Add(pdfTable)
        pdfDoc.Close()
        stream.Close()
    End Using

End Sub