In C # I have a DataGridView with data obtained from a database in MySql and I want to generate the PDF document but it marks an error when creating the body of the PDF in the method GenerarDocumentos
private void btn_imprimir_Click(object sender, EventArgs e)
{
if (dgv_listaActividades.RowCount == 0)
{
MessageBox.Show("No Hay Datos Para Realizar Un Reporte");
}
else
{ //ESCOJE A RUTA DONDE GUARDAREMOS EL PDF
SaveFileDialog save = new SaveFileDialog();
save.Filter = "PDF Files (*.pdf)|*.pdf|All Files (*.*)|*.*";
if (save.ShowDialog() == DialogResult.OK)
{
string filename = save.FileName;
Document doc = new Document(PageSize.A3, 9, 9, 9, 9);
Chunk encab = new Chunk("LISTA DE ACTIVIDADES DE LABORATORIO DE DIVULGACION", FontFactory.GetFont("COURIER", 18));
try
{
FileStream file = new FileStream(filename, FileMode.OpenOrCreate);
PdfWriter writer = PdfWriter.GetInstance(doc, file);
writer.ViewerPreferences = PdfWriter.PageModeUseThumbs;
writer.ViewerPreferences = PdfWriter.PageLayoutOneColumn;
doc.Open();
doc.Add(new Paragraph(encab));
GenerarDocumentos(doc);
Process.Start(filename);
doc.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message + ex.StackTrace);
}
}
}
}
public void GenerarDocumentos(Document document)
{
PdfPTable datatable = new PdfPTable(dgv_listaActividades.ColumnCount);
//asignamos algunas propiedades para el diseño del pdf
datatable.DefaultCell.Padding = 1;
float[] headerwidths = GetTamanoColumnas(dgv_listaActividades);
datatable.SetWidths(headerwidths);
datatable.WidthPercentage = 100;
datatable.DefaultCell.BorderWidth = 1;
datatable.DefaultCell.BackgroundColor = iTextSharp.text.BaseColor.WHITE;
datatable.DefaultCell.BorderColor = iTextSharp.text.BaseColor.BLACK;
iTextSharp.text.Font fuente = new iTextSharp.text.Font(iTextSharp.text.Font.FontFamily.HELVETICA);
Phrase objP = new Phrase("A", fuente);
datatable.DefaultCell.HorizontalAlignment = Element.ALIGN_CENTER;
for (int i = 0; i < dgv_listaActividades.ColumnCount; i++)
{
objP = new Phrase(dgv_listaActividades.Columns[i].HeaderText, fuente);
datatable.HorizontalAlignment = Element.ALIGN_CENTER;
datatable.AddCell(objP);
}
datatable.HeaderRows = 1;
datatable.DefaultCell.BorderWidth = 1;
//SE GENERA EL CUERPO DEL PDF
for (int i = 0; i < dgv_listaActividades.RowCount; i++)
{
for (int j = 0; j < dgv_listaActividades.ColumnCount; j++)
{
objP = new Phrase(dgv_listaActividades[j,i].Value.ToString(), fuente);
datatable.AddCell(objP);
}
datatable.CompleteRow();
}
document.Add(datatable);
}
//Función que obtiene los tamaños de las columnas del datagridview
public float[] GetTamanoColumnas(DataGridView dg)
{
//Tomamos el numero de columnas
float[] values = new float[dg.ColumnCount];
for (int i = 0; i < dg.ColumnCount; i++)
{
//Tomamos el ancho de cada columna
values[i] = (float)dg.Columns[i].Width;
}
return values;
}
When I give value to i of 1, and to j of 1 if it works only that a line does not appear in the DataGridView and it generates it when it is 0 not