Как отформатировать цикл для чтения текстовых файлов, а затем создать и заполнить DataGridView - PullRequest
0 голосов
/ 31 января 2019

Я в замешательстве, я не могу понять, почему этот цикл только производит следующее в 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, чтобы посмотреть, что в нем содержится, и в нем содержатся все данные, однако в таблице данных нет, и я не понимаю, почему.Сетка данных добавляет к ней только информацию о 3 продуктах, почему я не знаю, почему это так.

Каталог содержит 3 текстовых файла с 35 строками, поэтому в таблице данных должно быть видно всего 5 продуктов..

Чтобы прояснить ситуацию: цикл должен повторяться по сетке данных и записывать соответствующую информацию в каждую ячейку.Для каждого продукта есть 7 бит информации, как видно на изображении сетки данных.

Я пытался использовать dim dr = dt.NewRow() и dt.rows.add(dr), но теперь таблица данных пуста, содержит только заголовки столбцов..

Вот изображение один текстовых файлов.

Image of text file and how the information is stored.

Любая помощь с благодарностьючтобы избавить меня от разочарования.

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Это должно работать для любого количества файлов с любым количеством продуктов в каждом файле, если количество строк для продуктов остается равным 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
0 голосов
/ 31 января 2019

Из простого просмотра вашего кода - ваш dt.Rows.Add () - это то, что добавляет строки в вашу таблицу данных.Это только добавление 3-х строк, доступных в точке, которую вы называете.Поместите точку останова над ней и посмотрите, что доступно при ее добавлении в таблицу данных.Возможно, вам придется переместить это утверждение.Кроме того, вы можете проверить, к какому файлу он добавляется - 3 отображаемых элемента - это разные файлы или одинаковые?Это скажет вам, в какой момент ваше добавление является ошибочным.

...