Aggiunta di una tabella HTML a datagridview utilizzando il pacchetto Agility HTML

c# datagridview html html-agility-pack parsing

Domanda

Sto scrivendo una semplice app per analizzare la tabella HTML su datagridview usando l'aiuto del pacchetto HTML Agility. ma quando eseguo il codice mi viene visualizzato un errore "Questa riga appartiene già a questo tavolo"

Devo analizzare la tabella HTML semplice come di seguito

<html>
<head>
</head>
<body>
<table>
  <tr>
    <td>Alfreds Futterkiste</td>
    <td>Maria Anders</td>
    <td>Germany</td>
  </tr>
   <tr>
    <td>Alfreds Futterkiste</td>
    <td>Maria Anders</td>
    <td>Germany</td>
  </tr>
</table>
</body>
</html>

questo è il mio codice

private void button1_Click(object sender, EventArgs e)
    {
        var htmlCode = richTextBox1.Text.Trim();
        var doc = new HtmlDocument();
        doc.LoadHtml(htmlCode);

        dt = new DataTable();
        dt.Columns.Add("Company", typeof (string));
        dt.Columns.Add("Contact", typeof (string));
        dt.Columns.Add("Country", typeof (string));

        var count = 0;


        foreach (var table in doc.DocumentNode.SelectNodes("//table"))
        {
            foreach (var row in table.SelectNodes("//tr"))
            {
                var dr = dt.NewRow();

                var i = 0;
                foreach (var cell in row.SelectNodes("//td"))
                {


                    dr["Company"] = cell.InnerText.Replace("&nbsp;", "");
                    dr["Contact"] = cell.InnerText.Replace("&nbsp;", "");
                    dr["Country"] = cell.InnerText.Replace("&nbsp;", "");

                }


                dt.Rows.Add(dr);
            }


            grid.DataSource = dt;
        }
    }

Ho bisogno di un output semplice su datagridview come questo

inserisci la descrizione dell'immagine qui

Come posso fare questo con il pacchetto Agility HTML?

Risposta accettata

Sposta la seguente riga

dt.Rows.Add(dr);

fuori dal ciclo di foreach sopra le celle della tabella. Si tenta di aggiungere la stessa riga più volte al DataTable.

int i = 0;
foreach (var cell in row.SelectNodes("//td"))
{
    dr[i++] = cell.InnerText;
}
dt.Rows.Add(dr);


Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché