2013-02-18 64 views
1

我有一个HTML文件来源与保存值的表,我想将每个值转移到我建立的数据网格视图。例如:html表格到数据网格

<tr><td>32</td><td>jon</td><td>smith</td></tr> 

,并在我的数据网格视图我想:

age firstName lastName 
32  jon   smith 

(我媒体链接建立与柱头网格) 等等...

我如何“鱼“的价值从每个td到正确的地方? tnx :)

回答

1

这些值是否已经存在于某种DataTable或DataSet中? GridView本身呈现为一个表格,那么你是否在尝试做一些不必要的事情?

好的,我看你已经修改了这个问题。有一种称为HTML Agility Pack的功能,可以解析HTML并提取值。尽管我自己并没有使用它,但它可以节省您将表代码解析为字符串,只要您的HTML表格是有效的HTML。

http://htmlagilitypack.codeplex.com/

2

强大的解决 - 通过解析。将html文件读入一个字符串,然后将其读入另一个字符串,当您读取>时,应该读取整个标签(<tr>,</tr>,<td></td>),检查哪一个,如果是</tr>,则将X = 0,Y ++,如果它是</td>,那么X ++在读取标签后清除文本,重复,如果您读取<并且已经有一些数据读取,那么这个数据是一个文本应该放在[X,Y]位置在数据网格(可以解析Init之后,只要找到知道列数最大X)...

..我希望不会有任何困难,把说成C#代码= d

+0

我会建议一个类似的方法,也许使用正则表达式来以更简单/更有意义的方式进行解析。如果HTML可以转换成XML文档,甚至更好。 – egandalf 2013-02-18 16:28:21

0

一脏版。您可以生成自己的数据源,而不是List<IList>。谨防不良HTML的:

class Program { 

    static Regex cell = new Regex("<td>(.+?)</td>", RegexOptions.IgnoreCase); 
    static string htmlTable = "<tr><td>32</td><td>41</td></tr><tr><td>123123</td><td>123123123</td></tr>"; 

    static void Main(string[] args) { 
     var table = new List<IList<string>>(); //list of lists, kind of data table 

     foreach (var rowString in htmlTable.Split(new [] { "</tr>" }, StringSplitOptions.RemoveEmptyEntries)) //split into rows 
      table.Add(GetRowValues(rowString)); //get and add row values 
    } 

    static IList<string> GetRowValues(string rowString) { 
     return new List<string>(cell.Matches(rowString).Cast<Match>().Select(m => m.Groups[1].Value)); //extract cells values by regex 
    } 
} 
0

如果你的HTML是真的这个简单,没有对行或单元格属性和的内容概不奇怪的字符,正则表达式是一种快速,肮脏的解决方案:

string html = "<table><tr><td>32</td><td>jon</td><td>smith</td></tr></table>"; 
string pattern = "<tr>(?:<td>(.*?)</td>)*?</tr>"; 
foreach (Match m in Regex.Matches(html, pattern, RegexOptions.IgnoreCase)) 
{ 
    // Add row 
    var row = grid.AddRow(); 
    foreach (Capture c in m.Groups[1].Captures) 
    { 
     // Add cell 
     var cell = row.AddCell(); 
     cell.Contents = c.Value; 
    } 
} 

如果有任何机会你的HTML不是这样简单,使用HTML Agility Pack

string html = "<table><tr><td>32</td><td>jon</td><td>smith</td></tr></table>"; 
var table = new HtmlDocument(); 
table.LoadHtml(html); 
foreach (var tr in table.DocumentNode.Descendants("tr")) 
{ 
    // Add row 
    var row = grid.AddRow(); 
    foreach (var td in tr.Descendants("td")) 
    { 
     var cell = row.AddCell(); 
     cell.Contents = td.InnerText; 
    } 
} 

(我猜你是怎么在这里添加行和单元格的;希望你可以自己解决这个问题。)