Попробуйте это после кода:
table.Rows.Add(row);
row = new HtmlTableRow();
и после установки данных td, добавьте вторую строку в таблицу снова, используя
table.Rows.Add(row);
, вам необходимо повторно инициализировать переменную строки после добавления.
Таким образом, ваш код теперь будет выглядеть следующим образом:
row = new HtmlTableRow();
row.Cells.Add(new HtmlTableCell { InnerText = "First Name" });
row.Cells.Add(new HtmlTableCell { InnerText = "Last Name" });
row.Cells.Add(new HtmlTableCell { InnerText = "Age" });
table.Rows.Add(row); //Add First Row.
row = new HtmlTableRow(); // Reinitialize Row
row.Cells.Add(new HtmlTableCell { InnerText = "Jane" });
row.Cells.Add(new HtmlTableCell { InnerText = "Doe" });
row.Cells.Add(new HtmlTableCell { InnerText = "29" });
table.Rows.Add(row); // Add Second Row
Или лучше использовать другую переменную для устранения неоднозначности. Как headerRow, firstRow или около того.