C # - Создание отчетов HTML - PullRequest
       1

C # - Создание отчетов HTML

5 голосов
/ 04 апреля 2011

У меня в приложении winform 4 набора данных, которые получают значения из моей базы данных. Такие значения, как, например, количество продуктов в моей таблице продуктов и информация о категориях. Мне было интересно, как я могу сохранить информацию набора данных в HTML-странице. Я хочу создать шаблон HTML, чтобы я мог представить информацию в хорошем виде. Как я могу это сделать? Eny хорошее руководство, которое объясняет, как это сделать?

Ответы [ 4 ]

7 голосов
/ 04 апреля 2011

Это похоже на отличную работу для чего-то вроде RazorEngine . Вы можете определить шаблон с помощью синтаксиса Razor, а затем отобразить содержимое с помощью службы шаблонов 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>
2 голосов
/ 04 апреля 2011

Вы можете сохранить DataSet как XML, а затем преобразовать его, используя XSLT.

. Вы можете посмотреть на следующие образцы:

1 голос
/ 04 апреля 2011

Я лично рекомендую генерировать HTML с Linq to Xml (используя System.Xml.Linq)

Вам даже не нужно использовать строгую схему 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 голосов
/ 04 апреля 2011

То, что вы хотите, довольно просто, поэтому вы можете просто сгенерировать html напрямую и использовать какой-то предварительно созданный CSS для стилизации. Однако, если вы хотите что-то более сложное, посмотрите на Windward Reports .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...