Правильный способ преобразования разделенных строк texbox в сетку данных?

Пожалуйста, дайте мне несколько советов об этой ошибке. у меня есть TextBox вывод с уже чистым и отформатированным текстом, разделенным ; что соответствует 5 столбцам и неограниченным строкам. Но я не знаю, как заполнить DataGridView в правильном направлении. Я получил эту ошибку

Индекс был вне диапазона. Должен быть неотрицательным и меньшим, чем размер коллекции. Имя параметра: индекс

Пример текстового поля вывода 2 строки из 44

4C5E0C4255CD; pppoe; 4C: 5E: 0C: 42: 55: CD; 192.168.29.71; 2d19h16m6s 4C5E0C458887; pppoe; 4C: 5E: 0C: 45: 88: 87; 192.168.29.110; 2d19h16m3s

Private Sub QueryMkt_Click(sender As Object, e As EventArgs) Handles QueryMkt.Click
    DataGridView1.AutoGenerateColumns = False
    DataGridView1.Columns.Add("name", "name")
    DataGridView1.Columns.Add("service", "service")
    DataGridView1.Columns.Add("caller-id", "caller-id")
    DataGridView1.Columns.Add("address", "address")
    DataGridView1.Columns.Add("uptime", "uptime")

    For i As Integer = 0 To tbOutput.Lines.Length - 2

        Dim delimitedText As String = tbOutput.Lines(i)
        Dim holder As String() = Regex.Split(delimitedText, ";")

        'MessageBox.Show((i), (holder(0) + holder(4)))
        'DataGridView1.Item(0, i).Value = holder(0).ToString()

        DataGridView1.Rows(i).Cells("name").Value = holder(0).ToString()
        DataGridView1.Rows(i).Cells("service").Value = holder(1).ToString()
        DataGridView1.Rows(i).Cells("caller-id").Value = holder(2).ToString()
        DataGridView1.Rows(i).Cells("address").Value = holder(3).ToString()
        DataGridView1.Rows(i).Cells("uptime").Value = holder(4).ToString()
    Next
End Sub

1 ответ

Решение

Вы должны добавить столбцы один раз, в начале приложения, а затем использовать DataGridView.Rows.Add() в соответствии с предложением the_lotus. Вы можете просто передать массив "holder":

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    DataGridView1.AutoGenerateColumns = False
    DataGridView1.Columns.Add("name", "name")
    DataGridView1.Columns.Add("service", "service")
    DataGridView1.Columns.Add("caller-id", "caller-id")
    DataGridView1.Columns.Add("address", "address")
    DataGridView1.Columns.Add("uptime", "uptime")
End Sub

Private Sub QueryMkt_Click(sender As Object, e As EventArgs) Handles QueryMkt.Click
    For i As Integer = 0 To tbOutput.Lines.Length - 2
        Dim delimitedText As String = tbOutput.Lines(i)
        Dim holder As String() = Regex.Split(delimitedText, ";")
        DataGridView1.Rows.Add(holder)
    Next
End Sub
Другие вопросы по тегам