Может быть, это может помочь вам:
Сначала мы должны получить данные из БД, вышеупомянутая функция сделает это при сохранении результатов в DataTable
Private Function GetDataFromDB() As DataTable
Dim your_connection_string As String = "INSERT_YOUR_CONNECTION_STRING_HERE!"
Dim your_query As String = "INSERT_YOUR_QUERY_HERE!"
Dim dt As New DataTable
Using myConn As New OracleClient.OracleConnection(your_connection_string)
myConn.Open()
Using myCmd As New OracleClient.OracleDataAdapter(your_query, myConn)
myCmd.Fill(dt) 'Fill the DataTable with the query results
End Using
myConn.Close()
End Using
Return dt
End Function
Как вы можете видеть вышеупомянутая функция возвращает значение DataTable, поэтому мы будем вызывать его внутри следующей функции!
Приведенная ниже функция напечатает в файле PDF данные внутри DataGridView. Итак, мы собираемся связать DataTable
как DataGridView.DataSource
Private Sub CreatePdf(ByVal dt As DataTable)
Dim DataGridView1 As New DataGridView
DataGridView1.DataSource = dt
'Creating iTextSharp Table from the DataTable data
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 Data
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 = "YOUR_SAVING_PATH_HERE"
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
Как вы можете видеть, CreatePdf
имеет параметр DataTable, поэтому давайте назовем его при возникновении события button click
, например:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
CreatePdf(GetDataFromDB())
End Sub
Как вы можете видеть, мы вызываем функцию внутри функции. Это связано с тем, что CreatePdf()
имеет параметр DataTable, а GetDataFromDB возвращает значение DataTable!
нотабене
Для того, чтобы это работало, вам нужно включить следующее imports
:
Imports System.Data.SqlClient
Imports System
Imports iTextSharp.text
Imports iTextSharp.text.api
Imports iTextSharp.text.pdf
Imports iTextSharp.text.pdf.parser
Imports System.Text
Imports System.IO
Вы также должны добавить ссылку в itextsharp.dll и System.Data.OracleClient