2011-04-03 82 views
4

我有我的winform应用程序4个数据集,从我的数据库中获取值。值就像我的产品表中有多少产品以及有关类别的信息。我想知道如何将数据集信息保存在html页面中。我想创建一个html模板,以便我可以很好地呈现信息。我怎样才能做到这一点? Eny很好的指导,解释如何做到这一点?C# - 创建HTML报告

回答

5

这似乎是像RazorEngine一个伟大的工作。您可以定义使用剃刀语法模板,然后使用RazorEngine模板的服务,例如,呈现出内容:

@helper RenderItem(Item item) { 
    <tr> 
    <td>item.Name</td> 
    <td>item.Price</td> 
    </tr> 
} 

<html> 
    <head></head> 
    <body> 
    <table> 
     @foreach (Item item in Model.Items) { 
     @RenderItem(item) 
     } 
    </table> 
    </body> 
</html> 
1

我个人推荐(使用System.Xml.Linq的)

使用LINQ生成HTML到XML

你甚至不需要使用严格的XHTML模式,但是你会从Xml.Linq中获得里程堆积。下面是我自己的代码库的代码段:

#region Table Dump Implementation 

    private static XNode Dump<T>(IEnumerable<T> items, IEnumerable<string> header, params Func<T, string>[] columns) 
    { 
     if (!items.Any()) 
      return null; 

     var html = items.Aggregate(new XElement("table", new XAttribute("border", 1)), 
      (table, item) => { 
       table.Add(columns.Aggregate(new XElement("tr"), 
        (row, cell) => { 
         row.Add(new XElement("td", EvalColumn(cell, item))); 
         return row; 
        })); 
       return table; 
      }); 

     html.AddFirst(header.Aggregate(new XElement("tr"), 
      (row, caption) => { row.Add(new XElement("th", caption)); return row; })); 

     return html; 
    } 

    private static XNode EvalColumn<T>(Func<T, string> cell, T item) 
    { 
     var raw = cell(item); 
     try 
     { 
      var xml = XElement.Parse(raw); 
      return xml; 
     } 
     catch (XmlException) 
     { 
      return new XText(raw); 
     } 
    } 

    #endregion 

    #region Dot Diagrams 

    public void LinkDiagram(Digraph graph, string id) 
    { 
     if (!graph.AllNodes.Any()) 
      return; 
     var img = Path.GetFileName(GenDiagramFile(graph, _directory, id)); 

     _body.Add(
      new XElement("a", 
       new XAttribute("href", img), 
       new XElement("h4", "Link naar: " + graph.name), 
         new XElement("img", 
          new XAttribute("border", 1), 
          new XAttribute("src", img), 
          new XAttribute("width", "40%")))); 
    } 

需要注意的是它非常易于使用的内嵌HTML文本以及(只要它是有效的XML),使用辅助,像这样:

public void GenericAppend(string content) 
    { 
     if (!string.IsNullOrEmpty(content)) 
      _body.Add(XElement.Parse(content)); 
    } 
0

你想要的东西很容易,所以你可能只是想直接生成HTML,并使用一些预先创建的CSS的样式。但是,如果你想要更复杂的东西,请看看Windward Reports