我想要将文本文件加载到DataGridview
的项目
数据:
"#Tools Must You Have
Tool_1 Screwdriver T1
Tool_2 Screw T2
Tool_3 Ruler T3"
我有两个按钮(btSave
& btOpen
),DataGridview
有两列(Tools
& Name
)
我想将数据读取到DataGridview
,但我想跳过以" #
"开头的行。
我用这段代码尝试了它
Private Sub LoadGridData(ByRef ThisGrid As DataGridView, ByVal Filename As String)
ThisGrid.Rows.Clear()
Dim TextLine As String = ""
Dim SplitLine() As String
Using objReader As New System.IO.StreamReader(Filename)
Do While objReader.Peek() <> -1
TextLine = objReader.ReadLine()
SplitLine = Split(TextLine, " ")
Me.DataGridView1.Rows.Add(SplitLine)
Loop
End Using
End Sub
此代码错误,当它加载时,列中的文字不相同,只读一个字&#34; Screwdriver
&#34;不是&#34; screwdriver T1
&#34;,
对此有何解决方案?
答案 0 :(得分:1)
Private Sub LoadGridData(ByVal ThisGrid As DataGridView, ByVal Filename As String)
ThisGrid.Rows.Clear()
ThisGrid.Rows.AddRange(
File.ReadLines(FileName).
Where(Function(line) Not line.TrimStart().StartsWith("#")).
Select(Function(line) line.Split(" ".ToCharArray(), 2)).
ToArray()
)
End Sub
请注意(除其他事项外)从ByRef
到ByVal
的更改。很容易错过那个,ByRef
vs ByVal
可能并不意味着你的想法。请记住,VB.Net 中的ByVal
仍会传递引用。不同之处在于它创建了参考值的副本,但由于该副本仍然引用相同的DataGridView对象,因此它将执行您希望它执行的操作。您应该使用ByRef
的唯一时间是您需要直接对变量进行分配,并且您希望该分配显示在调用代码中。这与分配对象的属性不同。如果你想要实际替换整个对象,那么你只需要这个,而这几乎不应该。
答案 1 :(得分:0)
当您运行该分割功能时,您需要在每个空格上分割整个字符串,这样您就会得到3个长的数组,而T1则位于第3个字符串中。我假设你的表只用两列定义。试试这个:
Do While objReader.Peek() <> -1
TextLine = objReader.ReadLine()
If Textline.Trim.Length > 0 AndAlso not TextLine.StartsWith("#") Then
DataGridView1.Rows.Add(TextLine.Split(" ")(0), textLine.Replace(TextLine.Split(" ")(0), "").Substring(1))
End If
Loop
实际上,我对你的作业和数据做了各种各样的假设,但这应该会让你朝着正确的方向前进。