VB.NET 如何将DataGridView中勾选的行导出为CSV文件
问题排查与修复方案
核心错误原因
- 原有代码判断勾选状态时,永远读取的是
DataGridView1.CurrentRow也就是当前界面选中行的勾选状态,和你遍历到的导出行没有任何关联,自然无法正确筛选勾选行。 - LINQ查询阶段直接把行对象转换成了单元格值数组,丢失了原行的上下文信息,额外增加了判断成本。
修复后代码
' 直接在LINQ查询阶段完成勾选判断,过滤非目标行 Dim rows = From row As DataGridViewRow In DataGridView1.Rows.Cast(Of DataGridViewRow)() Where Not row.IsNewRow _ AndAlso row.Cells(10).Value IsNot Nothing _ AndAlso Convert.ToBoolean(row.Cells(10).Value) = True ' 判断当前遍历行第10列的勾选状态 Select Array.ConvertAll(row.Cells.Cast(Of DataGridViewCell).ToArray, Function(c) If(c.Value IsNot Nothing, c.Value.ToString, "")) Using sw As New IO.StreamWriter(Path) For Each r In rows sw.WriteLine(String.Join(",", r)) Next End Using
注意事项
- DataGridView的列索引从0开始计数,如果你说的第10列是界面从左到右数的第10个列,对应索引应为9,可根据实际情况调整。
- 如果你自定义了CheckBox列的
TrueValue属性为1而非默认布尔值,将勾选判断条件替换为row.Cells(10).Value.ToString() = "1"即可。 - 若单元格内容包含逗号、双引号,建议添加转义逻辑,避免生成的CSV格式异常。
内容的提问来源于stack exchange,提问作者Patrick
相关产品推荐
相关产品推荐

