我想使用iTextSharp在PDF文件中仅显示某些DataGridView列。我知道你可以将整个GridView插入到PDF文档中。但是,是否可以仅显示DataGridView的某些列?
到目前为止,这是我的代码:
iTextSharp.text.Font fontTable = FontFactory.GetFont("Arial", 8, iTextSharp.text.Font.NORMAL, BaseColor.BLACK);
PdfPTable table = new PdfPTable(dataGridView1.Columns.Count);
table.SpacingBefore = 45f;
table.TotalWidth = 300;
table.DefaultCell.Phrase = new Phrase() { Font = fontTable };
for (int j = 0; j < dataGridView1.Columns.Count; j++)
{
table.AddCell(new Phrase(dataGridView1.Columns[j].HeaderText, fontTable));
}
table.HeaderRows = 1;
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
for (int k = 0; k < dataGridView1.Columns.Count; k++)
{
if (dataGridView1[k, i].Value != null)
{
table.AddCell(new Phrase(dataGridView1[k, i].Value.ToString(),fontTable));
}
}
}
doc.Add(table);
答案 0 :(得分:0)
我面前没有IDE,所以这可能无法完美编译,但您只需要在for
语句中编写一些任意条件。这段代码直接从我链接的页面中提取,我刚刚添加了一些if
语句来检查列的名称并跳过这些。
foreach (DataGridViewColumn c in GridView.Columns)
{
if( c.Name == "Something" )
{
//Skip this column
continue;
}
//process these columns
//..
}
for (int i = 0; i < GridView.Rows.Count - 1; i++)
{
for (int j = 0; j < GridView.Columns.Count - 1; j++)
{
if( GridView.Columns[j].Name == "Something" )
{
//Skip this column
continue
}
//Process these columns
}
}
修改强>
根据您当前的代码和上述内容,您需要以下内容:
iTextSharp.text.Font fontTable = FontFactory.GetFont("Arial", 8, iTextSharp.text.Font.NORMAL, BaseColor.BLACK);
PdfPTable table = new PdfPTable(dataGridView1.Columns.Count);
table.SpacingBefore = 45f;
table.TotalWidth = 300;
table.DefaultCell.Phrase = new Phrase() { Font = fontTable };
for (int j = 0; j < dataGridView1.Columns.Count; j++)
{
if(dataGridView1.Columns[j].Name == "Something")
{
continue;
}
table.AddCell(new Phrase(dataGridView1.Columns[j].HeaderText, fontTable));
}
table.HeaderRows = 1;
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
for (int k = 0; k < dataGridView1.Columns.Count; k++)
{
if(dataGridView1.Columns[k].Name == "Something")
{
continue;
}
if (dataGridView1[k, i].Value != null)
{
table.AddCell(new Phrase(dataGridView1[k, i].Value.ToString(),fontTable));
}
}
}
doc.Add(table);
而不是Name
您可能需要使用ID
或仅使用j
和k
的实际索引,这真的取决于您如何设置你的DGV。
您还希望在内部for
循环中略微更改逻辑。您正在检查null,但仍需要添加单元格,否则整个表格可能会移位。
if (dataGridView1[k, i].Value != null)
{
table.AddCell(new Phrase(dataGridView1[k, i].Value.ToString(),fontTable));
}
else
{
table.AddCell(new Phrase(""));
}
您需要做的另一项更改是实际PdfPTable
的实例化。而不是:
PdfPTable table = new PdfPTable(dataGridView1.Columns.Count);
你会想做类似的事情:
PdfPTable table = new PdfPTable(dataGridView1.Columns.Count - 2); //Subtract the number of columns that you are hiding