C# iTextSharp和datagridview分页符
我正在尝试使用iTextSharp将datagrid导出为PDF,并且需要在一列更改时进行分页符。我有这个密码C# iTextSharp和datagridview分页符,c#,itext,C#,Itext,我正在尝试使用iTextSharp将datagrid导出为PDF,并且需要在一列更改时进行分页符。我有这个密码 using (FileStream stream = new FileStream(savefiledialoge.FileName, FileMode.Create)) { try { pdfdoc = new Document(PageSize.A4, 10f, 10f, 10f, 0f); PdfWriter writer = Pd
using (FileStream stream = new FileStream(savefiledialoge.FileName, FileMode.Create))
{
try
{
pdfdoc = new Document(PageSize.A4, 10f, 10f, 10f, 0f);
PdfWriter writer = PdfWriter.GetInstance(pdfdoc, stream);
pdfdoc.SetPageSize(PageSize.A4.Rotate()); // horizontal
pdfdoc.Open();
Encabezado();
for (int i = 0; i <= dataGridView1.RowCount; i++)
{
for (int j = 0; j < dataGridView1.Columns.Count; j++)
{
if (dataGridView1.Rows[i].Cells["Warehouse"].Value.ToString() == dataGridView1.Rows[i + 1].Cells["Warehouse"].Value.ToString())
{
pdftable.AddCell(new Phrase(dataGridView1.Rows[i].Cells[j].Value.ToString(), text));
}
else
{
pdftable.AddCell(new Phrase(dataGridView1.Rows[i].Cells[j].Value.ToString(), text));
pdfdoc.Add(pdftable);
pdfdoc.NewPage();
pdftable.DeleteBodyRows();
}
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "error occured ", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
您在循环中的列上有大小写区分:
for (int j = 0; j < dataGridView1.Columns.Count; j++)
{
if (dataGridView1.Rows[i].Cells["Warehouse"].Value.ToString() == dataGridView1.Rows[i + 1].Cells["Warehouse"].Value.ToString())
{
pdftable.AddCell(new Phrase(dataGridView1.Rows[i].Cells[j].Value.ToString(), text));
}
else
{
pdftable.AddCell(new Phrase(dataGridView1.Rows[i].Cells[j].Value.ToString(), text));
pdfdoc.Add(pdftable);
pdfdoc.NewPage();
pdftable.DeleteBodyRows();
}
}
关于“指数超出范围”:
- 一方面,如果您已经在最后一行,请不要将仓库与下一行的值进行比较,请参见上文
- 另一方面,正如@Bruno已经提到的,循环
应该提前停止,而不是停止i
for (int i = 0; i <= dataGridView1.RowCount; i++)
对于(int i=0;我确信
(int i=0;i@PhilippMaurer)来说,只是部分重复,超出范围的问题只是问题的一小部分。
for (int j = 0; j < dataGridView1.Columns.Count; j++) { pdftable.AddCell(new Phrase(dataGridView1.Rows[i].Cells[j].Value.ToString(), text)); } if (i == dataGridView1.RowCount - 1) { pdfdoc.Add(pdftable); } else if (dataGridView1.Rows[i].Cells["Warehouse"].Value.ToString() != dataGridView1.Rows[i + 1].Cells["Warehouse"].Value.ToString()) { pdfdoc.Add(pdftable); pdfdoc.NewPage(); pdftable.DeleteBodyRows(); }
for (int i = 0; i <= dataGridView1.RowCount; i++)
for (int i = 0; i < dataGridView1.RowCount; i++)