如何将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,可以采用两种方案:
- 先按上述方法导出Excel,再通过Office组件将Excel转存为PDF
- 引入iTextSharp库,遍历DataGridView的行和列直接生成PDF文件
内容的提问来源于stack exchange,提问作者Andre' Bella
相关产品推荐
相关产品推荐

