如何将文本文件读取到Datagridview

时间:2015-04-27 14:12:50

标签: vb.net file-io datagridview

我想要将文本文件加载到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;,
对此有何解决方案?

2 个答案:

答案 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

请注意(除其他事项外)从ByRefByVal的更改。很容易错过那个,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

实际上,我对你的作业和数据做了各种各样的假设,但这应该会让你朝着正确的方向前进。