分组元素,同时导出dataGridView PDF使用iTextSharp

本文关键字:dataGridView PDF 使用 iTextSharp 元素 | 更新日期: 2023-09-27 18:03:27

我试图将我的datagridview导出为PDF,但是在这样做的同时,我想对具有相同组名称的行进行分组。我用来导出为pdf的代码在下面;

private void PrintReport_Click(object sender, EventArgs e)
    {
        try
        {
            //create iTextSharp table
            PdfPTable pdfTable = new PdfPTable(dataGridView1.ColumnCount);
            pdfTable.DefaultCell.Padding = 3;
            pdfTable.WidthPercentage = 30;
            pdfTable.HorizontalAlignment = Element.ALIGN_LEFT;
            pdfTable.DefaultCell.BorderWidth = 1; 
            //Adding Header row
            PdfPCell cell = new PdfPCell(new Phrase("Report"));
            cell.Colspan = 11;
            cell.BackgroundColor = new iTextSharp.text.Color(50, 50, 120);
            cell.HorizontalAlignment = 1;
            pdfTable.TotalWidth = 1200f;
            pdfTable.LockedWidth = true;
            pdfTable.AddCell(cell);
            pdfTable.AddCell("Group");
            pdfTable.AddCell("Numara");
            pdfTable.AddCell("Müşteri ID");
            pdfTable.AddCell("Tanım");
            pdfTable.AddCell("IP Adresi");
            pdfTable.AddCell("Kullanıcı");
            pdfTable.AddCell("Şifre");
            pdfTable.AddCell("Domain");
            pdfTable.AddCell("2.IP");
            pdfTable.AddCell("2.Kullanıcı");
            pdfTable.AddCell("2.Kullanıcı Şifre");

            //Adding DataRow
            for (int i = 0; i < dataGridView1.Rows.Count; i++)
            {
                for (int j = 0; j < dataGridView1.Columns.Count; j++)
                {
                    if (dataGridView1.Rows[i].Cells[j].Value != null)
                    {
                        if (j == 6|| j == 10)
                        {
                            pdfTable.AddCell("*****");                                
                        }
                        else if(j==0)
                        {
                            pdfTable.AddCell(dataGridView1.Rows[i].Cells[6].Value.ToString());
                        }
                        else if(j==6)
                        {
                            pdfTable.AddCell(dataGridView1.Rows[i].Cells[0].Value.ToString());
                        }
                        else
                        {
                            pdfTable.AddCell(dataGridView1.Rows[i].Cells[j - 1].Value.ToString());                                
                        }
                    }
                    else
                    {
                        pdfTable.AddCell(" ");
                    }
                }
            }  
            //pdfTable.AddCell(cells.Value.ToString());
            //Exporting to PDF
            string folderPath = "C:''PDFs''";
            if (!Directory.Exists(folderPath))
            {
                Directory.CreateDirectory(folderPath);
            }
            using (FileStream stream = new FileStream(folderPath + "Rapor.pdf", FileMode.Create))
            {
                Document pdfDoc = new Document(PageSize.A2, 10f, 10f, 10f, 0f);
                PdfWriter.GetInstance(pdfDoc, stream);
                pdfDoc.Open();
                pdfDoc.Add(pdfTable);
                pdfDoc.Close();
                stream.Close();
            }
            MessageBox.Show("C:''PDFs uzantısına rapor kaydedildi!");
        }
        catch (Exception msg)
        {
            MessageBox.Show(msg.Message, "Error");
        }
    }

代码工作得很好,它将datagridview导出为pdf文件,但它没有按我想要的方式工作,它没有按' group Name'对列进行分组
我被这个问题难住了,希望能得到任何帮助。

分组元素,同时导出dataGridView PDF使用iTextSharp

您可以对结果进行排序,为每个有数据的'组'创建pdfTable吗?

我用一个小技巧解决了这个问题,我在一个名为'testlist'的列表中列出了所有组,所以我可以在1 pdfTable内管理处理情况下面是代码片段:

for (int element = 0; element < testList.Count;element++ )
            {
                string name = testList.ElementAt(element).ToString();
                PdfPCell cell1 = new PdfPCell(new Phrase(name));
                cell1.BackgroundColor = new iTextSharp.text.Color(160, 160, 210);
                cell1.Colspan = 11;
                cell1.HorizontalAlignment = 1;
                pdfTable.AddCell(cell1);
                for (int i = 0; i < dataGridView1.Rows.Count; i++)
                {
                    for (int j = 0; j < dataGridView1.Columns.Count; j++)
                    {
                        if (dataGridView1.Rows[i].Cells[j].Value != null)
                        {
                            if(dataGridView1.Rows[i].Cells[6].Value.ToString() == name.ToString())
                            { 
                                if (j == 6 || j == 10)
                                {
                                    pdfTable.AddCell("*****");
                                }
                                else if (j == 0)
                                {
                                    pdfTable.AddCell(dataGridView1.Rows[i].Cells[6].Value.ToString());
                                }
                                else if (j == 6)
                                {
                                    pdfTable.AddCell(dataGridView1.Rows[i].Cells[0].Value.ToString());
                                }
                                else
                                {
                                    pdfTable.AddCell(dataGridView1.Rows[i].Cells[j - 1].Value.ToString());
                                }
                            }                                
                        }
                        else
                        {
                            pdfTable.AddCell(" ");
                        }
                    }
                }
            }