将 DataGridView 写入和读取到文本文件
Writing and Reading DataGridView to text file
我正在寻找有关如何使用文本文件中的数据填充 DataGridView 控件的帮助。列数是静态的,但行数是动态的。我正在使用 StreamWriter 逐行创建文本文件。这是代码:
Private Sub btnSaveReport_Click(sender As Object, e As EventArgs) Handles btnSaveReport.Click
Dim path As String = "c:\users\service5\desktop\ReportFile.txt"
Using writer As New StreamWriter(path)
For row As Integer = 0 To dgvLabor.RowCount - 2
For col As Integer = 0 To dgvLabor.ColumnCount - 1
writer.WriteLine("Labor" & "|" & dgvLabor.Rows(row).Cells(col).Value)
Next
Next
writer.Close()
End Using
End Sub
输出文件如下所示:
Labor|Mon 09/25/2017
Labor|Labor Time
Labor|11:42 PM
Labor|12:42 AM
Labor|23.00
Labor|20
当我使用 StreamReader 方法从文本文件中读取每一行并将其放置在正确的列和行中时,我感到很困惑。我成功地使用“|”填充了文本框分隔格式,但我不确定如何处理 DataGridView 代码。重新格式化我的 StreamWriter 方法以使文件以逗号分隔而不是“|”是否明智?分隔?
更新 10/08/2017
好的,我让编写器按照我想要的方式格式化文本文件,并且 StreamReader 工作了 95%。它成功地为第一行填充了 DataGridView,但它需要识别以 "Labor" 开头的每一行,并在该行中添加一个包含数组的新行。这是我尝试读入 DataGridView 的文本示例。
Labor,Sun 10/08/2017,Labor Time,12:39 AM,12:39 AM,0.00,0
Labor,Mon 10/09/2017,Travel Time,12:39 AM,12:39 AM,0.00,0
这是 StreamReader 代码:
Private Sub OpenFileDialog1_FileOk(sender As Object, e As CancelEventArgs) Handles OpenFileDialog1.FileOk
Dim FileReader As StreamReader
Dim prop(2) As String
Dim path As String = OpenFileDialog1.FileName
FileReader = New StreamReader(path, False)
Do Until FileReader.EndOfStream
prop = FileReader.ReadLine().Split(",")
If String.Equals(prop(0), "Labor") Then
Dim col(6) As String
Dim index = dgvLabor.Rows.Add()
col = FileReader.ReadLine().Split(",")
dgvLabor.Rows(index).SetValues(col(1), col(2), col(3), col(4), col(5), col(6))
End If
Loop
FileReader.Close()
End Sub
我遇到问题的部分是以 "Labor" 开头的行数每次写入文本文件时都会有所不同,所以我想我需要在 If 中执行 Do Until 或 Do While 循环String.Equals 方法,但语法不正确。到目前为止,我已经尝试过这些但没有成功:
Do While String.Equals("Labor")
Do Until String.Equals(Not "Labor")
Do Until String.Equals(prop(0), "Labor")
有什么想法吗?
更新解决方案 10/09/2017
经过认真思考我的代码在做什么,我终于解决了这个问题。这很简单,证明我对所有事情都想得太多了。感谢您对我的帮助和耐心,jmcilhinney。希望这也能帮助其他人。
ElseIf String.Equals(prop(0), "Labor") Then
dgvLabor.Rows.Add(prop(1), prop(2), prop(3), prop(4), prop(5), prop(6))
End If
经过认真思考我的代码在做什么,我终于解决了这个问题。这很简单,证明我对所有事情都想得太多了。感谢您对我的帮助和耐心,jmcilhinney。希望这也能帮助其他人。
ElseIf String.Equals(prop(0), "Labor") Then
dgvLabor.Rows.Add(prop(1), prop(2), prop(3), prop(4), prop(5), prop(6))
End If
此代码采用已经拆分的行并将数组的所需对象插入到下一个可用行的单元格中。它只添加文本文档中以 "Labor"
开头的行
我正在寻找有关如何使用文本文件中的数据填充 DataGridView 控件的帮助。列数是静态的,但行数是动态的。我正在使用 StreamWriter 逐行创建文本文件。这是代码:
Private Sub btnSaveReport_Click(sender As Object, e As EventArgs) Handles btnSaveReport.Click
Dim path As String = "c:\users\service5\desktop\ReportFile.txt"
Using writer As New StreamWriter(path)
For row As Integer = 0 To dgvLabor.RowCount - 2
For col As Integer = 0 To dgvLabor.ColumnCount - 1
writer.WriteLine("Labor" & "|" & dgvLabor.Rows(row).Cells(col).Value)
Next
Next
writer.Close()
End Using
End Sub
输出文件如下所示:
Labor|Mon 09/25/2017
Labor|Labor Time
Labor|11:42 PM
Labor|12:42 AM
Labor|23.00
Labor|20
当我使用 StreamReader 方法从文本文件中读取每一行并将其放置在正确的列和行中时,我感到很困惑。我成功地使用“|”填充了文本框分隔格式,但我不确定如何处理 DataGridView 代码。重新格式化我的 StreamWriter 方法以使文件以逗号分隔而不是“|”是否明智?分隔?
更新 10/08/2017
好的,我让编写器按照我想要的方式格式化文本文件,并且 StreamReader 工作了 95%。它成功地为第一行填充了 DataGridView,但它需要识别以 "Labor" 开头的每一行,并在该行中添加一个包含数组的新行。这是我尝试读入 DataGridView 的文本示例。
Labor,Sun 10/08/2017,Labor Time,12:39 AM,12:39 AM,0.00,0
Labor,Mon 10/09/2017,Travel Time,12:39 AM,12:39 AM,0.00,0
这是 StreamReader 代码:
Private Sub OpenFileDialog1_FileOk(sender As Object, e As CancelEventArgs) Handles OpenFileDialog1.FileOk
Dim FileReader As StreamReader
Dim prop(2) As String
Dim path As String = OpenFileDialog1.FileName
FileReader = New StreamReader(path, False)
Do Until FileReader.EndOfStream
prop = FileReader.ReadLine().Split(",")
If String.Equals(prop(0), "Labor") Then
Dim col(6) As String
Dim index = dgvLabor.Rows.Add()
col = FileReader.ReadLine().Split(",")
dgvLabor.Rows(index).SetValues(col(1), col(2), col(3), col(4), col(5), col(6))
End If
Loop
FileReader.Close()
End Sub
我遇到问题的部分是以 "Labor" 开头的行数每次写入文本文件时都会有所不同,所以我想我需要在 If 中执行 Do Until 或 Do While 循环String.Equals 方法,但语法不正确。到目前为止,我已经尝试过这些但没有成功:
Do While String.Equals("Labor")
Do Until String.Equals(Not "Labor")
Do Until String.Equals(prop(0), "Labor")
有什么想法吗?
更新解决方案 10/09/2017
经过认真思考我的代码在做什么,我终于解决了这个问题。这很简单,证明我对所有事情都想得太多了。感谢您对我的帮助和耐心,jmcilhinney。希望这也能帮助其他人。
ElseIf String.Equals(prop(0), "Labor") Then
dgvLabor.Rows.Add(prop(1), prop(2), prop(3), prop(4), prop(5), prop(6))
End If
经过认真思考我的代码在做什么,我终于解决了这个问题。这很简单,证明我对所有事情都想得太多了。感谢您对我的帮助和耐心,jmcilhinney。希望这也能帮助其他人。
ElseIf String.Equals(prop(0), "Labor") Then
dgvLabor.Rows.Add(prop(1), prop(2), prop(3), prop(4), prop(5), prop(6))
End If
此代码采用已经拆分的行并将数组的所需对象插入到下一个可用行的单元格中。它只添加文本文档中以 "Labor"
开头的行