Как представить отформатированную информацию в форме .Net? - PullRequest
1 голос
/ 17 сентября 2009

У меня есть простое небольшое приложение, которое выполняет некоторый анализ всех наших корпоративных клиентов и генерирует баллы для каждого из них в зависимости от их деятельности (например, система счастья «светофора»).

Сгенерированный счет получает информацию из множества метрик и выплевывает то, что может казаться произвольным магическим числом.

Я хочу представить результаты алгоритма в удобной форме.

В настоящее время я использую простой HTML-документ, отображаемый в элементе управления веб-браузера, сгенерированный алгоритмом для каждой записи.

Например, вывод выглядит так:

A <strong>meeting</strong> gives <strong>20</strong> points.      Have <strong>1</strong> meeting.      <strong>20</strong> points.
Each <strong>phonecall</strong> gives <strong>5</strong> points.  Have <strong>5</strong> phone calls.  <strong>25</strong> points.
Each <strong>purchase</strong> gives <strong>10</strong> points.  Have <strong>2</strong> purchases.    <strong>20</strong> points.

(на самом деле, по ключевым словам также есть некоторые тонкие блики цвета)

Является ли встроенный элемент управления веб-браузера, заполненный сгенерированным HTML, действительно лучшим способом достижения такого рода результатов? Это кажется немного неправильным.

В настоящее время используется winforms, но, поскольку оно является новым, внутренним и простым приложением, оно может переключиться на WPF, если это более подходит.

Ответы [ 5 ]

2 голосов
/ 17 сентября 2009

Если вы не используете WPF, тогда ответ - да. Это лучший способ сделать это, особенно из-за форматирования.

WPF была бы намного лучшей идеей, поэтому, если вы можете, двигайтесь дальше. XAML твой друг.


EDIT:

Правильно, поэтому, если бы это было приложение WPF, вы могли бы использовать, например, Grid, чтобы получить правильный формат столбца и строки, который вам нужен. Затем с этого момента вы можете добавить Label или TextBox (меньше возможностей форматирования с последними) и расширить элементы управления ControlTemplate, или просто добавить Style в соответствии с вашими потребностями.

Теперь, если вы хотите сделать что-то вроде условного форматирования полученных значений, вы можете сделать это с помощью DataTemplate с DataTrigger для отображения стиля, зависящего от данных.

По сути, WPF даст вам гораздо больше гибкости, надежности и удобства обучения, чем использование элемента управления WebBrowser с хорошим старым HTML.

PS: Вы также можете шаблонизировать элемент управления DataGrid и стилизовать его под свои нужды, или даже динамически загружать ResourceDictionary для нескольких типов отображения. WPF очень гибкий.

0 голосов
/ 17 сентября 2009

Я бы использовал элемент управления WebBrowser , чтобы сделать что-то вроде:

    private void Form1_Load(object sender, EventArgs e)
    {
        StringBuilder sb = new StringBuilder();

        sb.AppendLine("<table style='width:100%;'>");

        sb.AppendLine("<tr>");
        // A meeting gives 20 points.      Have 1 meeting.      20 points.
        sb.AppendLine(AddTableDefinition(20, 1, "meeting"));
        sb.AppendLine("</tr><tr>");
        // Each phonecall gives 5 points.  Have 5 phone calls.  25 points.
        sb.AppendLine(AddTableDefinition(5, 5, "phone call"));
        sb.AppendLine("</tr><tr>");
        // Each purchase gives 10 points.  Have 2 purchases.    20 points.
        sb.AppendLine(AddTableDefinition(10, 2, "purchase"));
        sb.AppendLine("</tr>");

        sb.AppendLine("</table>");

        webBrowser1.DocumentText = sb.ToString();
    }

    private string AddTableDefinition(int pointsPerUnit, int units, string word)
    {
        return
            String.Format(
                "<td>A <strong>{0}</strong> gives <strong>{2}</strong> points.</td><td>Have <strong>{3}</strong> {1}.</td><td><strong>{4} points</strong>.</td>",
                    word, (units > 1) ? word + "s" : word,
                    pointsPerUnit, units, pointsPerUnit * units);
    }

заканчивается как

альтернативный текст http://www.balexandre.com/temp/2009-09-17_1342.png

0 голосов
/ 17 сентября 2009

Вы можете использовать GDI и сделать это с помощью метода рисования в пользовательском элементе управления. Однако это много кода форматирования, чтобы написать!

В прошлом я использовал HTML + контроль веб-браузера для такого рода вещей, без особых проблем.

Элемент управления RickTextBox показывает форматированный текст, но, вероятно, его будет сложнее использовать (я предполагаю, что вы уже немного знаете HTML) Элемент управления RickTextBox также не является гибким, как HTML.

Вы можете использовать WPF с XAML, это хорошо подойдет для этой задачи. Однако сначала вам придется изучить WPF…

Поэтому я думаю, что HTML + контроль веб-браузера - ваш лучший вариант.

0 голосов
/ 17 сентября 2009

Я возьму это с архитектурной точки зрения.

вы можете придумать какую-то настраиваемую шаблонную схему и реализовать ее на любом уровне представления.

т. Е. Шаблоны хранятся в XML или базе данных, а уровень представления понимает, как представлять данные.

, чтобы вы могли легко переключиться на любую подходящую презентацию.

0 голосов
/ 17 сентября 2009

вы можете использовать класс RichTextBox. Он может отображать форматированный текст (точно так же, как WordPad), но вы должны предоставить формат Rtf для этого класса. Если у вас есть только HTML, браузер - хорошая идея.

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