Home > Software engineering >  what is missing for DocumentNode function to show text in datagridview?
what is missing for DocumentNode function to show text in datagridview?

Time:12-03

What i´m trying to do is to use the documentnode method to find a specific table from the internet and put it into datagridview. My code can be seen below:

`

List<string> list = new List<string>();
DataTable dt1 = new DataTable();

var table = doc.DocumentNode.SelectNodes("xpath link")
       .Descendants("tr")
       .Where(tr=>tr.Elements("td").Count()>1)
       .Select(td => td.InnerText.Trim())
       .ToList();

foreach (var tables in table)
{ list.Add(tables.ToString());}

dataGridView1.DataSource = list

`

The result I get in the table is a list of numbers instead of text (datagridview table). As I have tried to see it the text actually appears I changed the foreach with the following code:

`

foreach (var tables in table)
{
 list.Add(tables.ToString());
richTextBox1.Text  = tables;
}

`

The result I get from the change is a string of the table in richTextBox1 but still a table of numbers in datagridview1 richtextbox1 text. This means I´m getting the right table from the internet and its being loaded correctly but i´m still missing something for the datagridview1 as I get a list of numbers instead of text that is being shown in richtextbox1. I followed this up by changing the DocumentNode function with removing parts in the .select part of the code and the datagridview1 stilled showed numbers (I added for example .ToString, .ToList() etc.).

What exactly have I missed in my code that makes this happen and should I have added something else to make it show the text instead of numbers?

Edit: New code.

`

List<string> list = new List<string>(); 
DataTable dt1 = new DataTable();
dt1.Columns.Add("td", typeof(int));

var table = doc.DocumentNode.SelectNodes("//div[@id=\"cr_cashflow\"]/div[2]/div/table")
.Descendants("tr")
.Select(td => td.InnerText.Trim())
.ToList();

foreach (var tables in table)
{
dt1.Rows.Add(new object[] { int.Parse(tables) });
}
dataGridView1.DataSource= dt1;

`

CodePudding user response:

Try something like this

List<string> list = new List<string>();
DataTable dt1 = new DataTable();
dt1.Columns.Add("td",typeof(int));
var rows = doc.DocumentNode.SelectNodes("xpath link")
       .Descendants("tr")
       .Where(tr=>tr.Elements("td").Count()>1)
       .Select(td => td.InnerText.Trim())
       .ToList();

foreach (var row in rows)
{ 
    dt.Rows.Add(new object[] { int.Parse(row)});
}
  • Related