Code Export dữ liệu từ DataGridView tới PDF với C#


Giới thiệu

Trong ví dụ này, chúng ta sẽ học các viết code C# để export dữ liệu từ DataGridView ra file PDF tới một thư mục nào đó.

Trong chương trình này, trước hết chúng ta sẽ thực hiện kết nối tới Database và lấy dữ liệu từ Database và hiển thị lên trên lưới như ảnh bên dưới. Bạn có thể tham khảo thêm phần lập trình với Cơ sở dữ liệu hoặc Khoá học đầy đủ với Lập trình .NET

How to export Datagrid to PDF with code C#

Hướng dẫn

Trước khi chúng ta bắt đầu phần code, chúng ta cần thêm thư viện iTextSharp tới dự án của chúng ta.
Để làm việc này, bạn kích chuột phải ở trên Project củ bạn và chọn menu “Manage NuGet Package“. Sau đó chọn tab “Browse” và tìm kiếm iTextSharp và cài đặt nó.

  • Project –> Manage NuGet Package –> Browse tab –> Tìm từ khoá iTextSharp; và rồi cài đặt.

Bây giờ, viết sự kiện Form Load, để lấy dữ liệu từ bảng tblEmployee trong cơ sở dữ liệu và hiển thị lên DataGridView. Trong ví dụ chúng ta giả sử có Database tên là DemoTest, trong đó có bảng
tblEmployee.

1. Code sự kiện Form Load


private void FrmExport_Load(object sender, EventArgs e)  
{  
    SqlConnection sqlCon;  
    string conString = null;  
    string sqlQuery = null;  
  
    conString = "Data Source=.;Initial Catalog=DemoTest;Integrated Security=SSPI;";  
    sqlCon = new SqlConnection(conString);  
    sqlCon.Open();  
    sqlQuery = "SELECT * FROM tblEmployee";  
    SqlDataAdapter dscmd = new SqlDataAdapter(sqlQuery, sqlCon);  
    DataTable dtData = new DataTable();  
    dscmd.Fill(dtData);  
    dataGridView1.DataSource = dtData;  
} 

Rồi, viết sự kiện cho nút Export, chúng ta phải tạo đối tượng PdfTable và đối tượng Document, lấy dữ liệu từ DataGridView, và thêm các hàng và các cột tới document này.

2. Code sự kiện click của nút Export


private void btnPdf_Click(object sender, EventArgs e)  
{  
    if (dataGridView1.Rows.Count > 0)  
    {  
        SaveFileDialog sfd = new SaveFileDialog();  
        sfd.Filter = "PDF (*.pdf)|*.pdf";  
        sfd.FileName = "Output.pdf";  
        bool fileError = false;  
        if (sfd.ShowDialog() == DialogResult.OK)  
        {  
            if (File.Exists(sfd.FileName))  
            {  
                try  
                {  
                    File.Delete(sfd.FileName);  
                }  
                catch (IOException ex)  
                {  
                    fileError = true;  
                    MessageBox.Show("Không thể ghi dữ liệu tới ổ đĩa. Mô tả lỗi:" + ex.Message);  
                }  
            }  
            if (!fileError)  
            {  
                try  
                {  
                    PdfPTable pdfTable = new PdfPTable(dataGridView1.Columns.Count);  
                    pdfTable.DefaultCell.Padding = 3;  
                    pdfTable.WidthPercentage = 100;  
                    pdfTable.HorizontalAlignment = Element.ALIGN_LEFT;  
  
                    foreach (DataGridViewColumn column in dataGridView1.Columns)  
                    {  
                        PdfPCell cell = new PdfPCell(new Phrase(column.HeaderText));  
                        pdfTable.AddCell(cell);  
                    }  
  
                    foreach (DataGridViewRow row in dataGridView1.Rows)  
                    {  
                        foreach (DataGridViewCell cell in row.Cells)  
                        {  
                            pdfTable.AddCell(cell.Value.ToString());  
                        }  
                    }  
  
                    using (FileStream stream = new FileStream(sfd.FileName, FileMode.Create))  
                    {  
                        Document pdfDoc = new Document(PageSize.A4, 10f, 20f, 20f, 10f);  
                        PdfWriter.GetInstance(pdfDoc, stream);  
                        pdfDoc.Open();  
                        pdfDoc.Add(pdfTable);  
                        pdfDoc.Close();  
                        stream.Close();  
                    }  
  
                    MessageBox.Show("Dữ liệu Export thành công!!!", "Info");  
                }  
                catch (Exception ex)  
                {  
                    MessageBox.Show("Mô tả lỗi :" + ex.Message);  
                }  
            }  
        }  
    }  
    else  
    {  
        MessageBox.Show("Không có bản ghi nào được Export!!!", "Info");  
    }  
} 

Bây giờ, chạy ứng dụng của bạn. Khi chúng ta kích trên nút “Export To Pdf“, nó sẽ hỏi nơi chúng ta lưu tệp. Đặt tên file và kích OK. Nó sẽ tạo ra têp pdf với tên file mà chúng ta vừa nhập ở trong thư mục mà chúng ta đã chọn.

Chúc các bạn thành công!

Có thể bạn sẽ thích…

13 phản hồi

  1. Tuấn viết:

    private void btnpdf_Click(object sender, EventArgs e)
    {
    if (dgvdanhsach.Rows.Count > 0)
    {
    SaveFileDialog sfd = new SaveFileDialog();
    sfd.Filter = “PDF (*.pdf)|*.pdf”;
    sfd.FileName = “Output.pdf”;
    bool fileError = false;
    if (sfd.ShowDialog() == DialogResult.OK)
    {
    if (File.Exists(sfd.FileName))
    {
    try
    {
    File.Delete(sfd.FileName);
    }
    catch (IOException ex)
    {
    fileError = true;
    MessageBox.Show(“Không thể ghi dữ liệu tới ổ đĩa. Mô tả lỗi:” + ex.Message);
    }
    }
    if (!fileError)
    {
    try
    {
    PdfPTable pdfTable = new PdfPTable(dgvdanhsach.Columns.Count);
    pdfTable.DefaultCell.Padding = 3;
    pdfTable.WidthPercentage = 100;
    pdfTable.HorizontalAlignment = Element.ALIGN_LEFT;

    foreach (DataGridViewColumn column in dgvdanhsach.Columns)
    {
    PdfPCell cell = new PdfPCell(new Phrase(column.HeaderText));
    pdfTable.AddCell(cell);
    }

    foreach (DataGridViewRow row in dgvdanhsach.Rows)
    {
    foreach (DataGridViewCell cell in row.Cells)
    {
    pdfTable.AddCell(cell.Value.ToString());
    }
    }

    using (FileStream stream = new FileStream(sfd.FileName, FileMode.Create))
    {
    Document pdfDoc = new Document(PageSize.A4, 10f, 20f, 20f, 10f);
    PdfWriter.GetInstance(pdfDoc, stream);
    pdfDoc.Open();
    pdfDoc.Add(pdfTable);
    pdfDoc.Close();
    stream.Close();
    }

    MessageBox.Show(“Dữ liệu Export thành công!!!”, “Info”);
    }
    catch (Exception ex)
    {
    MessageBox.Show(“Mô tả lỗi :” + ex.Message);
    }
    }
    }
    }
    else
    {
    MessageBox.Show(“Không có bản ghi nào được Export!!!”, “Info”);
    }
    }

  2. Tuấn viết:

    using iTextSharp.text.pdf;
    using iTextSharp.text;
    Dạ em làm rồi. khi chạy không báo lỗi gì. Chỉ khi thực hiện nhấn nút exp thì nó báo ra lỗi đó. chương trình vẫn chạy bình thường. không có lỗi hay bất cứ gì khác lạ

    • Phan Tiến viết:

      Em bỏ hết phần try … catch đi để xem dòng code nào bị lỗi, chỉ để thế này thôi rồi chạy xem nó lỗi ở dòng nào.
      if (!fileError)
      {
      PdfPTable pdfTable = new PdfPTable(dgvdanhsach.Columns.Count);
      pdfTable.DefaultCell.Padding = 3;
      pdfTable.WidthPercentage = 100;
      pdfTable.HorizontalAlignment = Element.ALIGN_LEFT;

      foreach (DataGridViewColumn column in dgvdanhsach.Columns)
      {
      PdfPCell cell = new PdfPCell(new Phrase(column.HeaderText));
      pdfTable.AddCell(cell);
      }

      foreach (DataGridViewRow row in dgvdanhsach.Rows)
      {
      foreach (DataGridViewCell cell in row.Cells)
      {
      pdfTable.AddCell(cell.Value.ToString());
      }
      }

      using (FileStream stream = new FileStream(sfd.FileName, FileMode.Create))
      {
      Document pdfDoc = new Document(PageSize.A4, 10f, 20f, 20f, 10f);
      PdfWriter.GetInstance(pdfDoc, stream);
      pdfDoc.Open();
      pdfDoc.Add(pdfTable);
      pdfDoc.Close();
      stream.Close();
      }

      MessageBox.Show(“Dữ liệu Export thành công!!!”, “Info”);
      }
      }
      }
      else
      {
      MessageBox.Show(“Không có bản ghi nào được Export!!!”, “Info”);
      }
      }

  3. Tuấn viết:

    dạ báo dòng này pdfTable.AddCell(cell.Value.ToString());
    NullReferenceException was unhandled

  4. LÊ Quang Dũng viết:

    Chào bạn Tuấn.
    Code Trên không sai mà là bạn chưa bỏ tích Ô (Enable Adding trong DataGridView).

  5. hocnk viết:

    lúc e chạy code nó báo lỗi tại
    foreach (DataGridViewRow row in dgrid_bill.Rows)
    {
    foreach (DataGridViewCell cell in row.Cells)
    {
    pdfTable.AddCell(cell.Value.ToString());

    }
    }

    ko biết tại sao ạ

Trả lời

EnglishVietnamese