将DataGridview导出为PDF时,不会显示所选列标题

时间:2016-03-12 08:30:34

标签: c# winforms pdf datagridview itextsharp

该表输出21列,我希望它出现在表单上,​​当它导出为PDF时,我只想选择6个特定列进行输出。

但在我的情况下,导出的PDF不会完全导出这些列,因为它只显示2列,数据行填充下一列标题。 这个datagridview是用SQL生成的,我正在使用ItextSharp。

这是datagridview: gridview is ok

PDF输出: table with jumbled header columns

这是代码:

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);
            }
        }
    }
}

我的桌子怎样才能正常显示?

1 个答案:

答案 0 :(得分:1)

使用AddCell并致电colNum时,会按照您添加的顺序将单元格添加到表格中。例如,如果您创建一个包含3列的表并添加值1,2,3,4,5,6,则1,2,3将添加到第一行,4,5,6将添加到第二行。

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

  1. memberGrid.Columns.Count替换为memtable.Columns[i].ColumnName
  2. memberGrid.Columns[i].HeaderText替换为if (memberGrid[k, x].Value != null)
  3. 如果列包含null值,则此语句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); 可能会导致类似问题。
  4. 这些是代码中明显的问题,1和2导致输出问题。

    示例:

    以下示例取自iTextSharp - Introducing Tables

    {{1}}