C#: atestat și pregătire ONTI

C#: grafice cu Chart și agregarea datelor

Construiește un grafic C# din date agregate, cu etichete și valori verificabile. Separă calculul totalurilor de reprezentarea vizuală în controlul Chart.

Un grafic convingător trebuie să reprezinte datele corecte. Pentru o bibliotecă numărăm împrumuturile pe categorii. Întâi calculăm totalurile, apoi le transmitem controlului Chart. Nu deducem valorile din înălțimea barelor și nu amestecăm rânduri individuale cu totaluri fără să explicăm unitatea de măsură.

Cum lucrezi cu exemplul

Exemplul complet se compilează ca Windows Forms App pe .NET Framework 4.8, cu C# 7.3. Deschide Lesson.csproj din arhivă în Visual Studio pe Windows. Rulează scenariile descrise mai jos; verificarea compilării nu înlocuiește testarea ferestrei și a dispozitivelor folosite.

Descarcă sursele și instrucțiunile.

Ideea și pașii de implementare

În proiectul .NET Framework adaugă referința System.Windows.Forms.DataVisualization. ChartArea definește zona axelor, iar Series definește seria de date și tipul reprezentării. Fiecare punct primește categoria pe axa X și numărul pe axa Y. IsValueShownAsLabel face rezultatul numeric vizibil și verificabil.

Gruparea este urmată de o ordonare explicită, astfel încât două rulări să arate aceeași ordine. Pentru o actualizare a datelor, golește punctele vechi înainte de a adăuga noua serie de rezultate. Altfel poți dubla vizual valorile la fiecare refresh.

Exemplu și rezultat așteptat

Datele conțin trei apariții pentru Programare și două pentru Literatura. Graficul are două bare etichetate 3 și 2. Suma înălțimilor numerice este cinci, egală cu numărul înregistrărilor. Axa Y pornește de la zero pentru a nu exagera diferența dintre categorii.

Schemă pentru lecția 25: 5 împrumuturi; GroupBy categorie; Programare 3; Literatură 2; Chart: două bare etichetate.5 împrumuturi → GroupBy categorie → Programare 3; Literatură 2 → Chart: două bare etichetate.Mărește schema ↗

Codul complet

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Windows.Forms;

static class Program
{
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new LessonForm());
    }
}

class LessonForm : Form
{
public LessonForm() {
        Text="Imprumuturi pe categorii";ClientSize=new Size(640,360);
        var chart=new System.Windows.Forms.DataVisualization.Charting.Chart {Dock=DockStyle.Fill};
        var area=new System.Windows.Forms.DataVisualization.Charting.ChartArea("Totaluri");
        area.AxisY.Minimum=0;area.AxisY.Title="Numar imprumuturi";chart.ChartAreas.Add(area);
        var series=new System.Windows.Forms.DataVisualization.Charting.Series("Imprumuturi") {
            ChartType=System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Column,IsValueShownAsLabel=true};
        string[] categories={"Programare","Literatura","Programare","Literatura","Programare"};
        foreach(var group in categories.GroupBy(x=>x).OrderBy(x=>x.Key,StringComparer.Ordinal))
            series.Points.AddXY(group.Key,group.Count());
        chart.Series.Add(series);Controls.Add(chart);
    }
}

Greșeli și limite

Nu reprezenta numărul de înregistrări ca procent fără un numitor clar. Nu ascunde categoria fără date dacă cerința solicită explicit toate categoriile. Culorile singure nu sunt suficiente pentru identificare: păstrează etichetele. Pentru multe categorii, o listă sau un tabel poate fi mai lizibil decât un grafic înghesuit.

Exersează

Adaugă o categorie cu o singură apariție și verifică totalul șase. Reîncarcă datele de două ori și confirmă că numărul punctelor nu se dublează. Construiește alături un tabel cu aceleași totaluri și compară valorile. Explică de ce o axă care începe la 1,9 ar face diferența dintre 2 și 3 să pară disproporționată.

Continuă parcursul

Parcursul complet de 50 de lecții

Bazele C#

Lecția precedentă: C#: drag and drop cu tipuri și limite explicite

Lecția următoare: C#: rapoarte tipărite și paginare cu PrintDocument.

Referință: documentația Microsoft.

Întrebări frecvente

De unde vine controlul Chart?

În acest proiect Framework, din assembly-ul System.Windows.Forms.DataVisualization, adăugat ca referință.

Calculez totalurile în grafic?

Preferabil le calculezi separat și trimiți graficului valori deja verificate.

De ce se dublează barele după refresh?

Verifică dacă ai golit punctele sau seria înainte de adăugarea rezultatelor noi.

Un pas mai departe

Autentifică-te pentru a păstra progresul în cont.

Exersează cu o problemă →