Добавление таблицы HTML в datagridview с помощью пакета Agility Agility

c# datagridview html html-agility-pack parsing

Вопрос

Я пишу простое приложение для разбора таблицы HTML в datagridview с помощью пакета HTML Agility. но когда я запускаю код, он бросает мне ошибку «Эта строка уже принадлежит этой таблице»

Мне нужно разобрать простую таблицу HTML, как показано ниже.

<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>

это мой код

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;
        }
    }

Мне нужен простой вывод на datagridview, как это

введите описание изображения здесь

Как я могу сделать это с помощью пакета гибкости HTML?

Принятый ответ

Переместите следующую строку

dt.Rows.Add(dr);

вне цикла foreach над ячейками таблицы. Вы пытаетесь добавить одну и ту же строку несколько раз в DataTable.

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


Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему