将 DataGridview 导出为 PDF 时未显示选定列 Headers
Selected Column Headers don't appear when Exporting DataGridview to PDF
table 输出 21 列,我希望它出现在表单上,当它导出为 PDF 时,我只想输出 select 6 个特定列。
但在我的例子中,导出的 PDF 不会完全导出这些列,因为它只显示 2 列并且数据行填充下一列 headers。
此 datagridview 是使用 SQL 生成的,我使用的是 ItextSharp。
这是代码:
for (int i = 0; i < colNum; i++)
{
Phrase ph = null;
if (memberGrid.Columns[i].Name == "Name" || memberGrid.Columns[i].Name == "Gender" || memberGrid.Columns[i].Name == "Address" || memberGrid.Columns[i].Name == "Email Address" || memberGrid.Columns[i].Name == "Mobile No" || memberGrid.Columns[i].Name == "Home No.")
{
ph = new Phrase(memtable.Columns[i].ColumnName, FontFactory.GetFont("Arial", HeaderTextSize, iTextSharp.text.Font.BOLD));
mainTable.AddCell(ph);
}
}
for (int x = 0; x < memberGrid.Rows.Count; x++)
{
for (int k = 0; k < memberGrid.Columns.Count; k++)
{
if (memberGrid.Columns[k].Name == "Name" || memberGrid.Columns[k].Name == "Gender" || memberGrid.Columns[k].Name == "Address" || memberGrid.Columns[k].Name == "Email Address" || memberGrid.Columns[k].Name == "Mobile No" || memberGrid.Columns[k].Name == "Home No.")
{
if (memberGrid[k, x].Value != null)
{
string s = memberGrid[k, x].Value.ToString().Trim();
Phrase ph = new Phrase(s, FontFactory.GetFont("Arial", ReportTextSize, iTextSharp.text.Font.NORMAL));
mainTable.AddCell(ph);
}
}
}
}
我的table如何才能正常显示?
使用 PdfTable
和调用 AddCell
时,单元格将按照您添加它们的顺序添加到 table。例如,如果您创建一个包含 3 列的 table 并添加值 1、2、3、4、5、6,则 1、2、3 将添加到第一行,而 4、5、6 将添加到第二行.
您应该更正代码中的一些内容:
- 将
colNum
替换为memberGrid.Columns.Count
- 将
memtable.Columns[i].ColumnName
替换为memberGrid.Columns[i].HeaderText
- 如果列包含
null
值,此语句 if (memberGrid[k, x].Value != null)
可能会导致类似的问题。
这些是 1 和 2 导致输出问题的代码的明显问题。
示例:
以下示例取自 iTextSharp - Introducing Tables:
PdfPTable table = new PdfPTable(3);
PdfPCell cell = new PdfPCell(new Phrase("Header spanning 3 columns"));
cell.Colspan = 3;
cell.HorizontalAlignment = 1; //0=Left, 1=Centre, 2=Right
table.AddCell(cell);
table.AddCell("Col 1 Row 1");
table.AddCell("Col 2 Row 1");
table.AddCell("Col 3 Row 1");
table.AddCell("Col 1 Row 2");
table.AddCell("Col 2 Row 2");
table.AddCell("Col 3 Row 2");
doc.Add(table);
table 输出 21 列,我希望它出现在表单上,当它导出为 PDF 时,我只想输出 select 6 个特定列。
但在我的例子中,导出的 PDF 不会完全导出这些列,因为它只显示 2 列并且数据行填充下一列 headers。 此 datagridview 是使用 SQL 生成的,我使用的是 ItextSharp。
这是代码:
for (int i = 0; i < colNum; i++)
{
Phrase ph = null;
if (memberGrid.Columns[i].Name == "Name" || memberGrid.Columns[i].Name == "Gender" || memberGrid.Columns[i].Name == "Address" || memberGrid.Columns[i].Name == "Email Address" || memberGrid.Columns[i].Name == "Mobile No" || memberGrid.Columns[i].Name == "Home No.")
{
ph = new Phrase(memtable.Columns[i].ColumnName, FontFactory.GetFont("Arial", HeaderTextSize, iTextSharp.text.Font.BOLD));
mainTable.AddCell(ph);
}
}
for (int x = 0; x < memberGrid.Rows.Count; x++)
{
for (int k = 0; k < memberGrid.Columns.Count; k++)
{
if (memberGrid.Columns[k].Name == "Name" || memberGrid.Columns[k].Name == "Gender" || memberGrid.Columns[k].Name == "Address" || memberGrid.Columns[k].Name == "Email Address" || memberGrid.Columns[k].Name == "Mobile No" || memberGrid.Columns[k].Name == "Home No.")
{
if (memberGrid[k, x].Value != null)
{
string s = memberGrid[k, x].Value.ToString().Trim();
Phrase ph = new Phrase(s, FontFactory.GetFont("Arial", ReportTextSize, iTextSharp.text.Font.NORMAL));
mainTable.AddCell(ph);
}
}
}
}
我的table如何才能正常显示?
使用 PdfTable
和调用 AddCell
时,单元格将按照您添加它们的顺序添加到 table。例如,如果您创建一个包含 3 列的 table 并添加值 1、2、3、4、5、6,则 1、2、3 将添加到第一行,而 4、5、6 将添加到第二行.
您应该更正代码中的一些内容:
- 将
colNum
替换为memberGrid.Columns.Count
- 将
memtable.Columns[i].ColumnName
替换为memberGrid.Columns[i].HeaderText
- 如果列包含
null
值,此语句if (memberGrid[k, x].Value != null)
可能会导致类似的问题。
这些是 1 和 2 导致输出问题的代码的明显问题。
示例:
以下示例取自 iTextSharp - Introducing Tables:
PdfPTable table = new PdfPTable(3);
PdfPCell cell = new PdfPCell(new Phrase("Header spanning 3 columns"));
cell.Colspan = 3;
cell.HorizontalAlignment = 1; //0=Left, 1=Centre, 2=Right
table.AddCell(cell);
table.AddCell("Col 1 Row 1");
table.AddCell("Col 2 Row 1");
table.AddCell("Col 3 Row 1");
table.AddCell("Col 1 Row 2");
table.AddCell("Col 2 Row 2");
table.AddCell("Col 3 Row 2");
doc.Add(table);