2009-09-17 5 views
1

J'ai une petite application simple qui effectue une analyse de tous nos clients corporatifs, et génère un score pour chacun d'entre eux en fonction de leurs activités (pensez au système de "feu de circulation").Comment présenter des informations formatées sur un formulaire .Net?

Le score généré obtient ses informations à partir d'une variété de métriques, et crache ce qui peut apparaître comme un nombre magique arbitraire. Je souhaite présenter les résultats de l'algorithme d'une manière facile à consommer. À l'heure actuelle, j'utilise un document HTML simple affiché dans un contrôle de navigateur Web, généré par l'algorithme pour chaque enregistrement.

Par exemple, la sortie ressemble à ceci:

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

(en réalité, il y a quelques subtils moments forts de la couleur sur les mots-clés trop)

est un contrôle de navigateur Web intégré, peuplées par produit HTML, vraiment le meilleur moyen de réaliser ce genre de chose? Cela semble un peu faux.

Actuellement en utilisant winforms, mais comme il s'agit d'une nouvelle application, interne et simple, peut passer à WPF si plus approprié.

Répondre

2

Si vous n'utilisez pas WPF, alors la réponse est oui. C'est à propos de la meilleure façon de le faire, surtout à cause du formatage. WPF serait une bien meilleure idée, donc si vous le pouvez, passez à autre chose. XAML est votre ami.


EDIT:

Righto, donc si cela était une application WPF, vous pouvez utiliser par exemple, un Grid pour vous donner la colonne de droite et de la ligne mise en forme dont vous avez besoin. Ensuite, à partir de ce point, vous pouvez ajouter un Label ou TextBox (Moins de capacité de formatage avec ce dernier) et étendre les contrôles ControlTemplate, ou simplement ajouter un Style en fonction de ce dont vous avez besoin. Maintenant, si vous voulez faire quelque chose comme la mise en forme conditionnelle sur les valeurs reçues, vous pouvez le faire en utilisant un DataTemplate avec DataTrigger pour afficher un style, en fonction des données. Fondamentalement, WPF vous donnera beaucoup plus de flexibilité, de robustesse et de qualité d'apprentissage, plutôt que d'utiliser un contrôle WebBrowser avec du bon vieux HTML. PS: Vous pouvez également modéliser le contrôle DataGrid et le styliser en fonction de vos besoins, ou même charger dynamiquement ResourceDictionary pour plusieurs types d'affichage. WPF est très flexible.

+1

XAML peut être mon ami, mais il serait bon de savoir comment il va m'aider. – tvanfosson

+0

+1 pour la mise à jour – tvanfosson

+0

Merci - beaucoup d'infos! On dirait que mon choix est maintenant entre l'utilisation du HTML et des winforms, que je connais et que je peux faire rapidement, ou que je l'utilise comme prétexte pour apprendre WPF :) – Cylindric

0

Vous pouvez utiliser la classe RichTextBox. Il peut afficher du texte formaté (exactement comme WordPad) mais vous devez fournir le format Rtf à cette classe. Si vous avez seulement du HTML, le navigateur est une bonne idée.

0

Je vais le prendre du point de vue architectural.

Vous pouvez penser à un type de schéma basé sur un modèle configurable et l'implémenter dans n'importe quelle couche de présentation.

Par exemple, les modèles sont stockés dans XML ou dans la base de données, et la couche de présentation comprend comment présenter les données.

de sorte que vous pouvez facilement passer à une présentation appropriée.

0

Vous pouvez utiliser GDI et le faire à partir de la méthode de peinture dans un contrôle personnalisé. Cependant ceci beaucoup de code de formatage à écrire!

Dans le passé, j'ai utilisé le contrôle HTML + webbrowser pour ce genre de chose, sans trop de problèmes. Le contrôle RickTextBox affiche le texte mis en forme, mais est susceptible d'être plus difficile à utiliser (je suppose que vous connaissez déjà un peu de HTML). Le contrôle RickTextBox n'est également pas flexible comme HTML.

Vous pouvez utiliser WPF avec XAML, cela fonctionnerait bien pour cette tâche. Cependant, vous devrez d'abord apprendre WPF ...

Par conséquent, je pense que le contrôle HTML + webbrowser est votre meilleure option.

0

Je voudrais utiliser le contrôle WebBrowser faire quelque chose comme:

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); 
    } 

finir comme

alt text http://www.balexandre.com/temp/2009-09-17_1342.png

+0

C'est exactement comme ça que je le fais en ce moment. Cela fonctionne bien (bien que j'aie eu un problème pour que le contrôle de webbrowser se comporte), mais je voulais être sûr que je ne faisais pas quelque chose de particulier. – Cylindric

+0

tant que vous remplissez un élément HTML, vous pouvez même inclure CSS dans le WebBrowser.DocumentText vous serez bien. – balexandre

Questions connexes