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

如何将SQL Server绑定的过滤后DataGridView数据导出为Excel或PDF

实现导出DataGridView筛选后数据的解决方案

你已经引入了ClosedXML库,我们直接基于当前DataGridView绑定的数据源导出即可,不需要重新查询数据库,不管你做了什么筛选,只要界面上展示的内容都会被导出。


第一步:先修复现有代码的bug

你当前的DGVSETPROPERTY方法所有列都操作的是索引为0的列,会导致列头显示错误,修改为:

Sub DGVSETPROPERTY()
    DataGridView1.Columns(0).Width = 40
    DataGridView1.Columns(0).HeaderText = "TaskID"

    DataGridView1.Columns(1).Width = 40
    DataGridView1.Columns(1).HeaderText = "Name"

    DataGridView1.Columns(2).Width = 40
    DataGridView1.Columns(2).HeaderText = "TaskCategory"

    DataGridView1.Columns(3).Width = 40
    DataGridView1.Columns(3).HeaderText = "TaskAssigned"

    DataGridView1.Columns(4).Width = 40
    DataGridView1.Columns(4).HeaderText = "TimeIssued"

    DataGridView1.Columns(5).Width = 40
    DataGridView1.Columns(5).HeaderText = "TargetTime"

    DataGridView1.Columns(6).Width = 40
    DataGridView1.Columns(6).HeaderText = "StartTime"

    DataGridView1.Columns(7).Width = 40
    DataGridView1.Columns(7).HeaderText = "FinishTime"

    DataGridView1.Columns(8).Width = 40
    DataGridView1.Columns(8).HeaderText = "Status"
End Sub

额外提示:你当前搜索功能的SQL是字符串拼接,存在SQL注入风险,建议后续改成参数化查询更安全。


第二步:添加导出Excel功能

在界面上新增一个导出按钮,双击添加点击事件,代码如下:

Private Sub btnExport_Click(sender As Object, e As EventArgs) Handles btnExport.Click
    ' 先判断是否有可导出的数据
    If DataGridView1.Rows.Count = 0 Then
        MessageBox.Show("没有可导出的数据")
        Exit Sub
    End If

    Try
        ' 直接获取当前筛选后绑定的DataTable
        Dim dt As DataTable = CType(DataGridView1.DataSource, DataTable)

        ' 弹出保存文件选择框
        Using sfd As New SaveFileDialog()
            sfd.Filter = "Excel文件 (*.xlsx)|*.xlsx|所有文件 (*.*)|*.*"
            sfd.FileName = $"任务数据导出_{DateTime.Now.ToString("yyyyMMddHHmmss")}.xlsx"
            If sfd.ShowDialog() = DialogResult.OK Then
                ' 用ClosedXML生成Excel文件
                Using workbook As New XLWorkbook()
                    Dim worksheet = workbook.Worksheets.Add(dt, "任务数据")
                    ' 自动调整列宽适配内容
                    worksheet.Columns().AdjustToContents()
                    ' 保存文件
                    workbook.SaveAs(sfd.FileName)
                End Using
                MessageBox.Show("导出成功!文件已保存至:" & sfd.FileName)
            End If
        End Using
    Catch ex As Exception
        MessageBox.Show("导出失败:" & ex.Message)
    End Try
End Sub

可选:导出PDF实现

如果需要导出PDF,可以采用两种方案:

  1. 先按上述方法导出Excel,再通过Office组件将Excel转存为PDF
  2. 引入iTextSharp库,遍历DataGridView的行和列直接生成PDF文件

内容的提问来源于stack exchange,提问作者Andre' Bella

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 14:45:06