如何使表格单元格可见性隐藏在itextsharp pdf中

时间:2015-10-23 07:26:36

标签: c# asp.net itextsharp

我有一个固定单元格为2的表格。我想根据条件隐藏表格单元格的可见性。我的病情是

PdfPTable table1 = new PdfPTable(2);
table1.SetTotalWidth(new float[] { 200f, 100f});
table1.TotalWidth = 800f;//table size

foreach (GridViewRow row in grdtimetable.Rows)
{
    Label lblday = (Label)row.FindControl("lbltopicvalue");
    Label lblperiod1 = (Label)row.FindControl("lblperiod1");

    table1.DefaultCell.HorizontalAlignment = Element.ALIGN_CENTER;
    table1.AddCell(new Phrase("Days", time550));

    if(lblperiod1 .Text!="NULL"||lblperiod1 .Text!="")
    {
        table1.DefaultCell.HorizontalAlignment = Element.ALIGN_CENTER;
        table1.AddCell(new Phrase(""+lblperiod1 .text+"", time550));
    }
    else
    {
        //Here I want to make this cell visibility hidden
    }

}

有可能吗?如果是的话,请帮助我

1 个答案:

答案 0 :(得分:4)

有几种方法可以做到这一点。我将举几例说明。

如果你想保持其他表格单元格的位置相同,即不将它们移到左边,你可以简单地添加空单元格:

doc.Add(new Paragraph("Option 1:"));
PdfPTable table = new PdfPTable(5);
table.SpacingBefore = 10;
for (int i = 1; i <= 5; i++)
{
    if (i == 2 || i == 3)
    {
        // Add an empty cell
        PdfPCell empty = new PdfPCell();
        empty.Border = PdfPCell.NO_BORDER;
        table.AddCell(empty);
    }
    else
    {
        table.AddCell(new PdfPCell(new Phrase("Cell " + i)));
    }
}
doc.Add(table);

如果您确实想要将单元格向左移动,但保留列宽,则可以在行的末尾添加空单元格。如果您希望对具有不同空单元数的多个表具有相同的表布局,则此选项非常有用。

(您可以通过调整表格宽度来获得相同的结果,而不是添加空单元格,但这会涉及更多计算。)

doc.Add(new Paragraph("Option 2:"));
PdfPTable table2 = new PdfPTable(5);
table2.SpacingBefore = 10;
int emptycells = 0;
for (int i = 1; i <= 5; i++)
{
    if (i == 2 || i == 3)
    {
        // Count the number of empty cells
        emptycells++;
    }
    else
    {
        table2.AddCell(new PdfPCell(new Phrase("Cell " + i)));
    }
}
// Add all empty cells at the end
for (int i = 0; i < emptycells; i++)
{
    PdfPCell empty2 = new PdfPCell();
    empty2.Border = PdfPCell.NO_BORDER;
    table2.AddCell(empty2);
}
doc.Add(table2);

最后,如果您只是确定将有多少个空单元格,那么在创建表格之前,您可以调整表格中的列数。

(同样,您可以调整表格宽度,以获得与上一个选项类似的结果。)

doc.Add(new Paragraph("Option 3:"));
// Determine the number of empty cells before hand
int emptycellsCounted = 2;
PdfPTable table3 = new PdfPTable(5 - emptycellsCounted);
table3.SpacingBefore = 10;
for (int i = 1; i <= 5; i++)
{
    if (i == 2 || i == 3)
    {
        // Do nothing
    }
    else
    {
        table3.AddCell(new PdfPCell(new Phrase("Cell " + i)));
    }
}
doc.Add(table3);

doc.Close();

你说还有一个额外的限制:如果一个单元格为空,则所有后续单元格也将为空。在这种情况下,选项1和2是相同的。

3个代码示例的结果:

Hidden cells