2015-07-20 2 views
0

Я пытаюсь экспортировать мой datagridview в PDF, но при этом я хочу сгруппировать строки, которые имеют одинаковое имя группы. Код, который я использую для экспорта в pdf, приведен ниже;Группировка элементов при экспорте данныхGridView в PDF с помощью iTextSharp

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-файл, но он не работает так, как я хочу, он не группирует столбцы «Название группы»
Я застрял в этой задаче любой помощи будет оценена.

ответ

0

Я решил проблему с небольшим трюком, я перечислил все группы в списке под названием «testlist» Таким образом, я могу управлять обрабатывать sutiation в пределах 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(" "); 
         } 

        } 
       } 

      } 
0

Вы можете просто отсортировать результаты, создать pdfTable для каждой группы, имеющей данные?

+0

Можете ли вы поделиться ссылкой или отправить пример кода вашего предложения? – BarisY

Смежные вопросы