简体   繁体   English

使用iTextSharp将dataGridView导出为PDF时对元素进行分组

[英]Grouping elements while exporting dataGridView to PDF using iTextSharp

I'm trying to export my datagridview to PDF however while doing that I want to group the rows which have the same Group name. 我正在尝试将datagridview导出为PDF,但同时我希望对具有相同组名的行进行分组。 The code I use to export to pdf is at the below; 我用于导出为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");
        }

    }

Code works pretty well, it exports the datagridview to pdf file but it does not work the way I want, It does not group columns by 'Group Name' 代码效果很好,它将datagridview导出为pdf文件,但是它不能按我想要的方式工作,它不会按“组名”对列进行分组
I'm stuck in this problem any help would be appreciated. 我陷入了这个问题,将不胜感激。

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

I have solved the problem with a little trick, I have listed all the groups in a list named 'testlist' So I can manage the handle the sutiation within 1 pdfTable There is the code snippet: 我已经用一个小技巧解决了这个问题,我已经在名为“ 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(" ");
                        }

                    }
                }

            } 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM