'System.IndexOutOfRangeException: 'Index was outside the bounds of the array.' in datagridview

I'm trying to retrieve data from the web to desktop using vbnet, but whenever i tried to show it on datagridview it show this error.

It only succes when i only show the first column.

But when it comes to add more column it will show at first but have error like this.

And when i tried to run it again it have error like this.

The code i use :

Imports System.Net
Imports System.IO
Public Class Form1
Dim strArr() As String
Dim strArr1() As String
Dim count, c1 As Integer
Dim str, str2 As String

Private Sub DataGridView1_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick

End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim k As Integer = 0
    Dim uri As New Uri("http://localhost/tampil.php")
    If (uri.Scheme = Uri.UriSchemeHttp) Then
        Dim request As HttpWebRequest = HttpWebRequest.Create(uri)
        request.Method = WebRequestMethods.Http.Get
        Dim response As HttpWebResponse = request.GetResponse()
        Dim reader As New StreamReader(response.GetResponseStream())
        Dim pagehtml As String = reader.ReadToEnd()
        response.Close()
        str = pagehtml
        strArr = str.Split(";")
        For count = 0 To strArr.GetUpperBound(0)
            ReDim Preserve strArr1(k)
            strArr1(k) = strArr(count)
            str2 = strArr1(k)
            Dim words As String() = strArr1(k).Split(New Char() {"-"c})
            If str2 = "" Then
                Exit For
            End If
            DataGridView1.Rows.Add("")
            DataGridView1.Rows(DataGridView1.Rows.Count - 2).Cells(0).Value = words(0)
            DataGridView1.Rows(DataGridView1.Rows.Count - 2).Cells(1).Value = words(1)
            DataGridView1.Rows(DataGridView1.Rows.Count - 2).Cells(2).Value = words(2)
            DataGridView1.Rows(DataGridView1.Rows.Count - 2).Cells(3).Value = words(3)
            DataGridView1.Rows(DataGridView1.Rows.Count - 2).Cells(4).Value = words(4)
            k += 1
        Next
    End If
End Sub
End Class

Data from web

enter image description here

Can anyone help ?



Solution 1:[1]

Adding a row will return the index of the new row.
You can use that when updating the cell values.

This method will add the rows as you'd expect.

If there is any chance of values being returned from the html query that have a different number of elements, you should check that.

Private Sub LoadDataGridViewFromHTML(htmlValue As String)

    Dim entities() As String = htmlValue.Split(Convert.ToChar(";"))

    For Each entityItem As String In entities

        If Not String.IsNullOrEmpty(entityItem) Then 'check you're not dealing with an empty string

            Dim entityValues() As String = entityItem.Split(Convert.ToChar("-"))

            Dim newRowId As Integer = DataGridView1.Rows.Add("")
            DataGridView1.Rows(newRowId).Cells(0).Value = entityValues(0)
            DataGridView1.Rows(newRowId).Cells(1).Value = entityValues(1)
            DataGridView1.Rows(newRowId).Cells(2).Value = entityValues(2)
            DataGridView1.Rows(newRowId).Cells(3).Value = entityValues(3)
            DataGridView1.Rows(newRowId).Cells(4).Value = entityValues(4)

        End If

    Next

End Sub

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Andrew Mortimer