如何格式化循环以读取文本文件,然后创建并填充DataGridView

时间:2019-01-30 22:28:54

标签: vb.net datagridview text-files

我很困惑,我似乎无法弄清楚为什么此循环仅在datagridview中产生以下内容: enter image description here

我使用的代码是:

Private Sub ReadTextFiles()
    Dim textline As String
    Dim dt As New DataTable
    dt.Columns.Add("Date & Time")
    dt.Columns.Add("Name")
    dt.Columns.Add("tpnb")
    dt.Columns.Add("Description")
    dt.Columns.Add("id")
    dt.Columns.Add("Department")
    dt.Columns.Add("Price")

    Dim fileentries As String() = Directory.GetFiles("D:\Comp Sci\ASC_BCKUP_260119\ASC_w-Login\bin\Debug\Orders")
    For Each entry In fileentries
        Dim linecount As Integer = File.ReadAllLines(entry).Length
        Dim rowcount As Integer = linecount / 7
        Using reader As New StreamReader(entry)
            For rowcount = 0 To rowcount - 1
                dt.Rows.Add()
                For col = 0 To 6
                    textline = reader.ReadLine()
                    TextBox1.Text += textline
                    dt.Rows(rowcount)(col) = textline
                Next
            Next
        End Using
    Next
    DataGridView1.DataSource = dt
    'DataGridView1.Columns("Price").DefaultCellStyle.Format = "£00:00"
End Sub

我添加了textbox1来查看其中包含的内容并包含所有数据,但是datagridview没有,我也看不到为什么。 datagridview仅将3个产品的信息附加到其上,为什么我不确定为什么这样做。

该目录包含3个文本文件,总共35行,因此在datagridview中应该可以看到总共5种产品。

要清除问题: 这里的循环应该遍历datagridview并将相关信息写入每个单元格。对于每种产品,都有7位信息,如datagridview的图像所示。

我尝试使用dim dr = dt.NewRow()dt.rows.add(dr),但是datagridview现在为空,仅包含列标题。

这是一个文本文件的图像。

Image of text file and how the information is stored.

非常感谢您提供帮助,以使我摆脱沮丧。

2 个答案:

答案 0 :(得分:1)

只要每个产品的行数保持为7,这对于任何文件中具有任意数量产品的文件都应适用。

Private Sub ReadTextFiles()
    Dim dt As New DataTable
    dt.Columns.Add("Date & Time")
    dt.Columns.Add("Name")
    dt.Columns.Add("tpnb")
    dt.Columns.Add("Description")
    dt.Columns.Add("id")
    dt.Columns.Add("Department")
    dt.Columns.Add("Price")
    '3 files
    '7 fields
    '35 lines total
    '5 products
    Dim fileentries As String() = Directory.GetFiles("TestFiles")
    Dim lstLines As New List(Of String)
    For Each entry In fileentries
        lstLines.AddRange(File.ReadAllLines(entry))
    Next
    'Now we have all the data lines in a list
    Dim i As Integer
    Dim OuterLoopIterations As Integer = CInt(lstLines.Count / 7)
    For iterations = 0 To OuterLoopIterations - 1
        Dim row = dt.NewRow
        For col = 0 To 6
            row(col) = lstLines(i)
            i += 1
        Next
        dt.Rows.Add(row)
    Next
    DataGridView1.DataSource = dt
End Sub

答案 1 :(得分:0)

仅查看代码即可-dt.Rows.Add()是将行添加到数据表的方法。它只是将可在你把它叫做点的3行。 在其上方放置一个断点,查看将其添加到数据表时可用的内容。您可能需要移动该语句。 另外,您可以检查其添加的文件-显示的3个项目是来自不同文件还是相同文件?这会告诉你在什么时候你将是错误的。