问题描述
我有一个包含多个文本文件的文件夹,每个文本文件包含约14行文本。 我想将该文件夹中的所有文本文件添加到vb.net中的gridcontrol / gridview。
我当前的代码仅添加1个文本文件,而不是全部添加。任何帮助将不胜感激。
Dim path As String = "C:\Plan\"
For Each i As String In System.IO.Directory.GetFiles(path)
Dim a,b,c As String
a = System.IO.Path.GetFileNameWithoutExtension(i)
b = System.IO.Path.GetFileName(i)
c = System.IO.Path.GetFullPath(i)
Dim LINE_pair As String = IO.File.ReadLines(i).ElementAtOrDefault(0)
Dim LINE1_details As String = IO.File.ReadLines(i).ElementAtOrDefault(1)
Dim LINE2_outlookcombo As String = IO.File.ReadLines(i).ElementAtOrDefault(2)
Dim LINE3_rsicombo As String = IO.File.ReadLines(i).ElementAtOrDefault(3)
Dim LINE4_macdcombo As String = IO.File.ReadLines(i).ElementAtOrDefault(4)
Dim LINE4_ratio As String = IO.File.ReadLines(i).ElementAtOrDefault(5)
Dim LINE5_pattern As String = IO.File.ReadLines(i).ElementAtOrDefault(6)
Dim LINE6_none As String = IO.File.ReadLines(i).ElementAtOrDefault(7)
Dim LINE7_timeframecomvo As String = IO.File.ReadLines(i).ElementAtOrDefault(8)
Dim LINE7_date As String = IO.File.ReadLines(i).ElementAtOrDefault(9)
Dim LINE8_Trade As String = IO.File.ReadLines(i).ElementAtOrDefault(10)
Dim LINE9_currentprice As String = IO.File.ReadLines(i).ElementAtOrDefault(11)
Dim LINE10_tp As String = IO.File.ReadLines(i).ElementAtOrDefault(12)
Dim LINE11_sl As String = IO.File.ReadLines(i).ElementAtOrDefault(13)
Dim NewItem As New ListViewItem(a)
Dim dt As New DataTable()
dt.Columns.AddRange(New DataColumn(13) {New DataColumn("Pair"),New DataColumn("Outlook"),New DataColumn("RSI"),New DataColumn("MACD"),New DataColumn("Pattern"),New DataColumn("Misc"),New DataColumn("Rato"),New DataColumn("Time Frame"),New DataColumn("Date"),New DataColumn("File name"),New DataColumn("Trade Status"),New DataColumn("CP"),New DataColumn("TP"),New DataColumn("SL")})
dt.Rows.Add(New String() {LINE_pair,LINE2_outlookcombo,LINE3_rsicombo,LINE4_macdcombo,LINE5_pattern,LINE6_none,LINE4_ratio,LINE7_timeframecomvo,LINE7_date,a,LINE8_Trade,LINE9_currentprice,LINE10_tp,LINE11_sl})
GridControl1.DataSource = dt
解决方法
不必显式声明DataColumn
数组。它是由括号内的项目内部创建的。
您将在每次迭代中丢掉NewItem
。为什么不将它们添加到列表中,然后一次全部添加到ListView
。
您正在分配LINE_数据时反复读取文件。读取一次,然后使用生成的lines数组。
您从不在此代码中使用b
和c
,所以我删除了它们
我使用.net DataGridView
进行了测试。 io文件的方法和DataTable相同。
Private Sub OPCode()
Dim path As String = "C:\Plan\"
Dim dt As New DataTable()
Dim lstListViewItems As New List(Of ListViewItem)
dt.Columns.AddRange({New DataColumn("Pair"),New DataColumn("Outlook"),New DataColumn("RSI"),New DataColumn("MACD"),New DataColumn("Pattern"),New DataColumn("Misc"),New DataColumn("Rato"),New DataColumn("Time Frame"),New DataColumn("Date"),New DataColumn("File name"),New DataColumn("Trade Status"),New DataColumn("CP"),New DataColumn("TP"),New DataColumn("SL")})
For Each i As String In System.IO.Directory.GetFiles(path)
Dim a = System.IO.Path.GetFileNameWithoutExtension(i)
Dim lines = File.ReadLines(i)
Dim LINE_pair As String = lines.ElementAtOrDefault(0)
Dim LINE1_details As String = lines.ElementAtOrDefault(1)
Dim LINE2_outlookcombo As String = lines.ElementAtOrDefault(2)
Dim LINE3_rsicombo As String = lines.ElementAtOrDefault(3)
Dim LINE4_macdcombo As String = lines.ElementAtOrDefault(4)
Dim LINE4_ratio As String = lines.ElementAtOrDefault(5)
Dim LINE5_pattern As String = lines.ElementAtOrDefault(6)
Dim LINE6_none As String = lines.ElementAtOrDefault(7)
Dim LINE7_timeframecomvo As String = lines.ElementAtOrDefault(8)
Dim LINE7_date As String = lines.ElementAtOrDefault(9)
Dim LINE8_trade As String = lines.ElementAtOrDefault(10)
Dim LINE9_currentprice As String = lines.ElementAtOrDefault(11)
Dim LINE10_tp As String = lines.ElementAtOrDefault(12)
Dim LINE11_sl As String = lines.ElementAtOrDefault(13)
dt.Rows.Add({LINE_pair,LINE2_outlookcombo,LINE3_rsicombo,LINE4_macdcombo,LINE5_pattern,LINE6_none,LINE4_ratio,LINE7_timeframecomvo,LINE7_date,a,LINE8_trade,LINE9_currentprice,LINE10_tp,LINE11_sl})
Dim NewItem As New ListViewItem(a)
lstListViewItems.Add(NewItem)
Next
ListView1.Items.AddRange(lstListViewItems.ToArray)
DataGridView1.DataSource = dt
End Sub