【发布时间】:2021-08-30 06:17:55
【问题描述】:
我有一个 DataGridView,我将值保存到 CSV 文件中。该代码在 CSV 中创建一个空值,其中 DataGridView 中有一个空单元格。我遇到的问题是 DataGridView 中的第 10 列。这是一个复选框列。此列的值为“Nothing”,除非它已被选中或未选中,在这种情况下该值变为 0 或 1(False 或 True)。
当我将 CSV 加载回 DataGridView 时,如果 CheckBox 列有空值,我会收到错误消息。从 CSV 导入时,DataGridView 不接受此列的“Nothing”值。
有没有办法将第 10 列的值仅导出为 0 或 1?
希望有人能帮我解决这个问题。 提前致谢。
这是我用来将 DataGridView 保存到 CSV 文件的代码。
Dim rows = From row As DataGridViewRow In DataGridView1.Rows.Cast(Of DataGridViewRow)()
Where Not row.IsNewRow
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
这是我用来将 CSV 加载回 DataGridView 的代码。
Try
Dim streamReader As IO.StreamReader = New IO.StreamReader(FullPath)
'Read CSV file content
While streamReader.Peek() <> -1
rowvalue = streamReader.ReadLine()
cellvalue = rowvalue.Split(","c)
DataGridView1.Rows.Add(cellvalue)
End While
streamReader.Close()
Catch ex As Exception
MsgBox("File not found")
End Try
【问题讨论】:
-
你真正想做什么?是否希望网格仅包含
True和False?您是否希望网格包含Nothing但将其导出为False?您是否希望文件包含空值但将它们导入为False?您是否希望文件包含空值并将它们导入为Nothing?所有这些都减少了可能性。 -
我建议具体问题是您将该数据导入为空的
Strings,而不是Nothing。您需要确定您实际上要解决的问题。您是要正确导入已有的数据还是要导入不同的数据? -
我刚刚测试过,我可以确认将
Nothing导入复选框列效果很好,但导入一个空的String则不行。这正是您应该期望的,因为该列首先包含Nothing,但是在期望True或False的列中的任何类型的String根本没有意义。 -
感谢您的及时回复@jmcilhinney。我将复选框列的基础值设置为 0 和 1。理想情况下,复选框列不会有任何“无”值,只有 0 或 1,所以当我导出到 CSV 并重新导入它时,不应该有有什么问题。
标签: vb.net csv datagridview export-to-csv