Ich habe momentan ein Projekt und komme bei einer Funktion nicht weiter. Es soll den gesamten Inhalt von TableLayoutPanel in eine PDF exportieren.
Im Moment funktioniert es nur mit DataGridView.
Dieser Code wäre die Funktion die Daten von DataGriedView in eine PDF Datei exportiert.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;
private void button4_Click(object sender, EventArgs e)
{
//Pfad auswählen
saveFileDialog1.InitialDirectory = "C:";
saveFileDialog1.Filter = "PDF Datei | *.pdf";
saveFileDialog1.ShowDialog();
try
{
//Estellt ein Dokument mit angegebenen Seitenabständen
Document doc = new Document(iTextSharp.text.PageSize.LETTER, 10, 10, 42, 35);
//PDF Datei mit Dateiname wird erstellt
PdfWriter wri = PdfWriter.GetInstance(doc, new FileStream(saveFileDialog1.FileName, FileMode.Create));
//Dokument wird geöffnet
doc.Open();
PdfPTable table = new PdfPTable(dataGridView1.Columns.Count);
//Die Kopfzeile in die Tabele hinzufügen
for (int j = 0; j < dataGridView1.Columns.Count; j++)
{
table.AddCell(new Phrase(dataGridView1.Columns[j].HeaderText));
}
//Erste Zeile als Kopfzeile setzen
table.HeaderRows = 1;
//Die Daten einfüllen von DataGridView in die Tabele
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
for (int k = 0; k < dataGridView1.Columns.Count; k++)
{
if (dataGridView1[k, i].Value != null)
{
table.AddCell(new Phrase(dataGridView1[k, i].Value.ToString()));
}
}
}
//Die Tabele freigeben
doc.Add(table);
//Dokument schliessen
doc.Close();
//Meldung wenn Datei erstellt wurde
MessageBox.Show("PDF wurde erstellt!", "", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch
{
//Meldung wenn Datei nicht erstellt wurde
MessageBox.Show("PDF wurde nicht erstellt!", "", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
Was einem auffällt:
Ansonsten solltest Du potentiellen Helfern nicht nur sagen, dass es nicht geht, sondern was genau hier nicht geht. Du schreibst mit keinem Wort, was Dein aktuelles Problem denn ist.
Siehe [Hinweis] Wie poste ich richtig? Punkt 5
Keiner kann an dem Code erkennen, was Dein eigentliches Problem ist - und Hellsehen kann hier niemand 😉
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Dieser Code funktioniert. Es dient nur als Gedankenstütze oder als Beispiel...Mein eigentliches Problem ist ich brauche einen Code der TableLayoutPanel in PDF exportiert. Ich bin noch ein anfänger ^^
Du musst alle Controls in dem TableLayoutPanel durchlaufen, die Koordinaten der einzelnen Controls auslesen, in eine geordnete Form (sortiert nach row & column) bringen und dann das ganze in das PDF übertragen (genauso wie Du es mit dem GridView machst).
So kannst Du alle Controls in dem TableLayoutPanel durchlaufen und die Koordinaten ermitteln:
foreach (Control ctl in this.tableLayoutPanel1.Controls)
{
TableLayoutPanelCellPosition coord = this.tableLayoutPanel1.GetCellPosition(ctl);
}
Hallo athavan94,
hier die Antwort auf Deine Frage per PN.
So kannst Du jede Zelle des TableLayoutPanels durchlaufen:
TableLayoutPanel pnl = new TableLayoutPanel();
for (int zeile = 0; zeile < pnl.RowCount; zeile++)
{
for (int spalte = 0; spalte < pnl.ColumnCount; spalte++)
{
Control ctl = pnl.GetControlFromPosition(spalte, zeile);
}
}
Gruß hypersurf
Verstehe und table.AddCell hat du da auch eine Ahnung wie ich das machen könnte?
Danke
Nein, da Du uns bisher nicht verraten hast was für Controls in dem TableLayoutPanel enthalten sind 😉
Es sind nur panels drin im tableLayoutPanel. Die werden nach dem Klicken eines Buttons einer nach dem anderen rot.
Hallo,
was genau möchtest du denn von den Panels übernehmen? Nur die Hintergrundfarbe als Rechteck in die PDF-Tabelle?
Schau dir mal TextSharp - Introducing Tables an - dort wird auf PdfPCell verwiesen.
Um dann die Hintergrundfarbe zu setzen: itext color for cell data
Ein bißchen mehr Eigeninitiative (bzw. mehr Infos) deinerseits solltest du dir aber angewöhnen.