You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# WinForm实现点击按钮导出DataGridView单行至PDF(iTextSharp)

导出DataGridView特定行到PDF(含表头)

核心思路

先提取目标行数据,搭配原DataGridView的表头构建临时数据源,再用iTextSharp将这个临时数据源导出为PDF,复用你已有的导出逻辑即可。

实现步骤与代码

1. 按钮点击事件:获取目标行并构建临时数据源

假设你需要导出选中的行,按钮点击事件代码如下:

private void btnExportSelectedRow_Click(object sender, EventArgs e)
{
    // 校验是否选中行
    if (dataGridView1.SelectedRows.Count == 0)
    {
        MessageBox.Show("请先选中一行数据");
        return;
    }

    // 获取选中的目标行
    DataGridViewRow targetRow = dataGridView1.SelectedRows[0];

    // 创建临时DataTable,用于存放表头和目标行
    DataTable tempTable = new DataTable();

    // 复制原DataGridView的表头列
    foreach (DataGridViewColumn col in dataGridView1.Columns)
    {
        tempTable.Columns.Add(col.HeaderText);
    }

    // 将目标行数据填入临时表
    DataRow newRow = tempTable.NewRow();
    for (int i = 0; i < dataGridView1.Columns.Count; i++)
    {
        // 处理空值,避免导出异常
        newRow[i] = targetRow.Cells[i].Value ?? DBNull.Value;
    }
    tempTable.Rows.Add(newRow);

    // 调用导出方法
    ExportToPdf(tempTable, "特定行数据.pdf");
}

如果需要导出指定索引的行(比如第3行,索引从0开始),把dataGridView1.SelectedRows[0]替换成dataGridView1.Rows[2]即可。

2. 通用导出方法(适配完整/特定行导出)

修改你原有的导出方法,让它接受DataTable作为参数,这样既可以传入完整数据源导出全部,也可以传入临时表导出特定行:

private void ExportToPdf(DataTable dataTable, string savePath)
{
    // 初始化PDF文档
    Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 10f, 0f);
    PdfWriter.GetInstance(pdfDoc, new FileStream(savePath, FileMode.Create));
    pdfDoc.Open();

    // 添加标题(可选,可根据需求修改)
    Paragraph title = new Paragraph("特定行导出数据", new Font(Font.FontFamily.TIMES_ROMAN, 12f, Font.BOLD));
    title.Alignment = Element.ALIGN_CENTER;
    pdfDoc.Add(title);
    pdfDoc.Add(Chunk.NEWLINE);

    // 创建PDF表格,列数与DataTable一致
    PdfPTable pdfTable = new PdfPTable(dataTable.Columns.Count);
    pdfTable.WidthPercentage = 100;

    // 添加表头单元格
    foreach (DataColumn col in dataTable.Columns)
    {
        PdfPCell headerCell = new PdfPCell(new Phrase(col.ColumnName, new Font(Font.FontFamily.TIMES_ROMAN, 10f, Font.BOLD)));
        headerCell.BackgroundColor = new BaseColor(240, 240, 240);
        pdfTable.AddCell(headerCell);
    }

    // 添加数据行
    foreach (DataRow row in dataTable.Rows)
    {
        foreach (var cellValue in row.ItemArray)
        {
            pdfTable.AddCell(new Phrase(cellValue.ToString(), new Font(Font.FontFamily.TIMES_ROMAN, 10f)));
        }
    }

    pdfDoc.Add(pdfTable);
    pdfDoc.Close();
    MessageBox.Show("导出完成!");
}

关键说明

  • 临时表构建:严格保留原DataGridView的表头文本,只添加目标行数据,确保导出格式和完整导出一致
  • 空值处理:用?? DBNull.Value避免单元格为空时抛出异常
  • 复用逻辑:将导出逻辑与数据源解耦,既支持完整导出也支持特定行导出,减少冗余代码

内容的提问来源于stack exchange,提问作者Shubham Jadhav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 01:36:01