将 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 将添加到第二行.

您应该更正代码中的一些内容:

  1. colNum替换为memberGrid.Columns.Count
  2. memtable.Columns[i].ColumnName替换为memberGrid.Columns[i].HeaderText
  3. 如果列包含 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);