planetz Ответов: 1

Несколько gridviews в один pdf с помощью iTextsharp


Всем Привет,

Я пытаюсь экспортировать несколько gridviews в один pdf - файл с помощью iTextSharp. Я циклически просматриваю GridView, а затем циклически просматриваю строки gridview. Петля идет нормально. Но после загрузки pdf-файла можно увидеть только последний gridview. Похоже, что gridviews перезаписывают друг друга, и остается только последний. Вот мой код. Что я делаю не так?

protected void btnExportToPDF_Click(object sender, EventArgs e)
        {
            GridView[] gvExcel = new GridView[] { gridvw1,gridvw2,gridvw3 };
            Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 10f, 10f);
            

            for (int i = 0; i < gvExcel.Length; i++)
            {
                if (gvExcel[i].Visible)
                {

                    PdfPTable pdfTbl = new PdfPTable(gvExcel[i].HeaderRow.Cells.Count);

                    foreach (TableCell headerTblCell in gvExcel[i].HeaderRow.Cells)
                    {
                        Font font = new Font();
                        font.Color = new BaseColor(gvExcel[i].HeaderStyle.ForeColor);
                        PdfPCell pdfCell = new PdfPCell(new Phrase(headerTblCell.Text));
                        pdfCell.BackgroundColor = new BaseColor(gvExcel[i].HeaderStyle.ForeColor);
                        pdfTbl.AddCell(pdfCell);
                    }


                    foreach (GridViewRow gvRow in gvExcel[i].Rows)
                    {
                        foreach (TableCell tblCell in gvRow.Cells)
                        {
                            Font font = new Font();
                            font.Color = new BaseColor(gvExcel[i].RowStyle.ForeColor);
                            PdfPCell pdfCell = new PdfPCell(new Phrase(tblCell.Text));
                            pdfCell.BackgroundColor = new BaseColor(gvExcel[i].RowStyle.ForeColor);
                            pdfTbl.AddCell(pdfCell);
                        }
                    }

                    //Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 10f, 10f);
                    PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
                    pdfDoc.Open();
                    pdfDoc.Add(pdfTbl);
                }
            }

            pdfDoc.Close();

            //Response.Clear();
            Response.ContentType = "application/pdf";
            Response.AppendHeader("content-disposition", "attachment;filename=report_" + startDate + "-" + endDate + ".pdf");
            Response.Write(pdfDoc);
            Response.Flush();
            Response.End();
        }


Что я уже пробовал:

Я уверен, что есть где-то, где сетки перекрываются. Но я не могу найти, где именно.

1 Ответов

Рейтинг:
1

planetz

Хорошо...раньше я использовал методы GetInstance и Open внутри цикла for. Это мой модифицированный код.

protected void btnExportToPDF_Click(object sender, EventArgs e)
       {
           GridView[] gvExcel = new GridView[] { gridvw1,gridvw2,gridvw3 };
           Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 10f, 10f);
           PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
           pdfDoc.Open();


           for (int i = 0; i < gvExcel.Length; i++)
           {
               if (gvExcel[i].Visible)
               {

                   PdfPTable pdfTbl = new PdfPTable(gvExcel[i].HeaderRow.Cells.Count);

                   foreach (TableCell headerTblCell in gvExcel[i].HeaderRow.Cells)
                   {
                       Font font = new Font();
                       font.Color = new BaseColor(gvExcel[i].HeaderStyle.ForeColor);
                       PdfPCell pdfCell = new PdfPCell(new Phrase(headerTblCell.Text));
                       pdfCell.BackgroundColor = new BaseColor(gvExcel[i].HeaderStyle.ForeColor);
                       pdfTbl.AddCell(pdfCell);
                   }


                   foreach (GridViewRow gvRow in gvExcel[i].Rows)
                   {
                       foreach (TableCell tblCell in gvRow.Cells)
                       {
                           Font font = new Font();
                           font.Color = new BaseColor(gvExcel[i].RowStyle.ForeColor);
                           PdfPCell pdfCell = new PdfPCell(new Phrase(tblCell.Text));
                           pdfCell.BackgroundColor = new BaseColor(gvExcel[i].RowStyle.ForeColor);
                           pdfTbl.AddCell(pdfCell);
                       }
                   }
                   pdfDoc.Add(pdfTbl);

               }
           }

           pdfDoc.Close();

           //Response.Clear();
           Response.ContentType = "application/pdf";
           Response.AppendHeader("content-disposition", "attachment;filename=report" + startDate + "-" + endDate + ".pdf");
           Response.Write(pdfDoc);
           Response.Flush();
           Response.End();
       }


Хотя все gridviews идут, но они застряли один конец к другому фронту, что делает его похожим на огромный единый стол.