Как увеличить значение Datagridview.row? - PullRequest
0 голосов
/ 07 октября 2019

У меня есть код для вставки значений в Datagridview с 2 столбцами. Но со значением For Each у меня есть только первое значение, а не все значения.

Я думаю, это потому, что я могу добавить другое, потому что код принимает только первое значение и не добавляет другие встроки.

DataGridView1.ColumnCount = 2
DataGridView1.Columns(0).Name = "Products"
DataGridView1.Columns(1).Name = "Links"
Dim page = New HtmlDocument()
page.Load("C:\Users\test\Desktop\thanos.txt")
Dim lists = page.DocumentNode.SelectNodes("//div[@class='marketplace-collectible-list']")
For Each list In lists
    Dim prod As String = list.SelectSingleNode(".//*[@class = 'catalog-item-name']").InnerText.Trim()
    Dim link As String = list.SelectSingleNode(".//*[@class = 'image-container']//img//@src").Attributes("src").Value
    DataGridView1.Rows.Add(prod, link)
Next

Как увеличить значение других? Редактировать: я попытался следующее безуспешно.

For Each list In lists
    Dim f As Integer
    f = DataGridView1.Rows.Count
    Dim n As Integer = DataGridView1.Rows.Add()
    DataGridView1.Rows.Item(n).Cells(0).Value = list.SelectSingleNode(".//*[@class = 'catalog-item-name']").InnerText.Trim() + 1
    DataGridView1.Rows.Item(n).Cells(1).Value = list.SelectSingleNode(".//*[@class = 'image-container']//img//@src").Attributes("src").Value + 1
    DataGridView1.Rows.Add(f)
Next

С этим кодом у меня есть все правильные данные только в одном столбце:

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        DataGridView1.ColumnCount = 2
        DataGridView1.Columns(0).Name = "Products"
        DataGridView1.Columns(1).Name = "Links"


        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
        Dim link As String = "https://www.hobbydb.com/marketplaces/hobbydb/catalog_items?utf8=%E2%9C%93&q=thanos+sideshow&commit=Go"
        Dim doc As HtmlDocument = New HtmlWeb().Load(link)
        Dim div As HtmlNode = doc.DocumentNode.SelectSingleNode("//div[@class='marketplace-collectible-list']")
        For Each node As HtmlNode In div.SelectNodes("//div[@class='marketplace-collectible-list']//a[@class = 'catalog-item-name']")
            DataGridView1.Rows.Add(node.InnerText.Trim())
        Next
        For Each node2 As HtmlNode In div.SelectNodes("//div[@class='image-container']//img//@src")
            DataGridView1.Rows.Add(node2.Attributes("src").Value)
        Next
End Sub
End Class

Но я хочу node & node2 в разных столбцах.

Я тоже так пытаюсь, но у меня есть только первое значение:

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        DataGridView1.ColumnCount = 2
        DataGridView1.Columns(0).Name = "Products"
        DataGridView1.Columns(1).Name = "Links"
        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
        Dim link As String = "https://www.hobbydb.com/marketplaces/hobbydb/catalog_items?utf8=%E2%9C%93&q=thanos+sideshow&commit=Go"
        Dim page = New HtmlWeb().Load(link)
        Dim lists = page.DocumentNode.SelectNodes("//div[@class='marketplace-collectible-list']")
        For Each list In lists
            For i As Integer = 0 To lists.Count - 1
                DataGridView1.Rows.Add()
                DataGridView1.Rows(i).Cells(0).Value = lists(i).SelectSingleNode(".//*[@class = 'catalog-item-name']").InnerText.Trim()
                DataGridView1.Rows(i).Cells(1).Value = lists(i).SelectSingleNode(".//*[@class = 'image-container']//img//@src").Attributes("src").Value
            Next
        Next
    End Sub
End Class

Ответы [ 2 ]

0 голосов
/ 09 октября 2019
        'create the datatable as a data source for the datagridview
    Dim dt As DataTable = New DataTable()
    dt.Columns.Add(New DataColumn("Product"))
    dt.Columns.Add(New DataColumn("Link"))

    'connect to the site
    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
    Dim siteaddress As String = "https://www.hobbydb.com/marketplaces/hobbydb/catalog_items?utf8=%E2%9C%93&q=thanos+sideshow&commit=Go"
    Dim doc As HtmlDocument = New HtmlWeb().Load(siteaddress)
    Dim div As HtmlNode = doc.DocumentNode.SelectSingleNode("//div[@class='marketplace-collectible-list']")
    'get data
    For Each item As HtmlNode In div.SelectNodes("*//div[@class = 'row catalog-item-info']")
        Dim product As HtmlNode = item.SelectSingleNode("*//a[@class = 'catalog-item-name']")
        Dim link As HtmlNode = item.SelectSingleNode("*//div[@class = 'image-container']//img//@src")
        dt.Rows.Add(New Object() {product.InnerText.Trim(), link.Attributes("src").Value})
    Next

    'bind data
    DataGridView1.DataSource = dt
0 голосов
/ 07 октября 2019

Жаль, что я не могу попробовать то, что вы пытаетесь, но если я посмотрю на него, у вас есть списки в виде коллекции и представление данных, которое все еще пусто, и вы хотите заполнить его при одновременном изменении индекса коллекции списков .. .

Я думаю, что это должно сработать для вас, если бы вы объявили тип списков, вы бы помогли мне больше помогать вам, вы должны убедиться, что списки (список чего-то) не просто dim lists какПожалуйста, попробуйте:

for i as integer = 0 to lists.count - 1
    DataGridView1.Rows.Add()
    DataGridView1.Rows(i).Cells(0).Value = lists(i).SelectSingleNode(".//*[@class = 'catalog-item-name']").InnerText.Trim() + 1
    DataGridView1.Rows(i).Cells(1).Value = lists(i).SelectSingleNode(".//*[@class = 'image-container']//img//@src").Attributes("src").Value
next
...