IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

MSCharts : séries multiple et valeur manquante


Sujet :

C#

  1. #1
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Points : 3 102
    Points
    3 102
    Par défaut MSCharts : séries multiple et valeur manquante
    Bonjour à tous,

    je me replonge dans les MSCharts en je suis confronté à un problème que je n'arrive pas à résoudre.

    Je souhaite afficher des graph contenant deux séries.
    Ces séries sont basées sur deux List<Demande> :
    - le première contient 100 éléments
    - le seconde en contient 50.
    --> en somme, la première liste contient une série de demande et la seconde ne contient que les demandes réalisées.

    Je veux afficher des stats sur mes demandes en effectuant des regroupements sur leurs divers attributs (Service, Mois, Année, etc.)

    Pour le moment, je procède ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    Series Contrats = ChartContrat.Series.Add("Demandes Effectuées");
                Contrats.ChartType = SeriesChartType.Bar;
                IEnumerable<IGrouping<string, Demande>> DemandesC = lstDemandes.OrderBy(q => q.Contrat).GroupBy(q => q.Contrat);
                foreach (IGrouping<string, Demandes> item in DemandesC)
                {
                    Contrats.Points.Add(new DataPoint()
                    {
                        Label = item.Count().ToString(),
                        YValues = new Double[] { item.Count() }, 
                        AxisLabel = item.Key 
                    });
                }
     
                Series ContratsR = ChartContrat.Series.Add("Demandes réalisées");
                ContratsR.ChartType = SeriesChartType.Bar;
                IEnumerable<IGrouping<string, Demandes>> DemandesR = LstDemandesRealisees.OrderBy(q => q.Contrat).GroupBy(q => q.Contrat);
                foreach (IGrouping<string, Demandes> item in DemandesR)
                {
                    ContratsR.Points.Add(new DataPoint()
                    {
                        Label = item.Count().ToString(),
                        YValues = new Double[] { item.Count() },
                        AxisLabel = item.Key.ToString()
                    });
                }
     
                ChartContrat.ChartAreas["ChartArea1"].Area3DStyle.Enable3D = true;
                ChartContrat.ChartAreas["ChartArea1"].AxisX.LabelStyle.Interval = 1;
    Cela fonctionne bien si les deux séries contiennent le même nombre de clé.
    Si, par contre, aucune demande n'a été réalisée sur un contrat qui comporte des demandes, la seconde série se trouve décalée par rapport à la première, rendant ainsi le graph erroné.

    J'ai cherché comment je pouvais forcer la cohérence entre les deux séries mais là, je suis bloqué.

    Si vous avez des idées, je suis preneur

    D'avance merci

  2. #2
    Membre expérimenté Avatar de callo
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 887
    Points : 1 699
    Points
    1 699
    Par défaut
    Bonjour,
    Peut-être une piste. Plasserre a parlé du problème des points manquants qui peut être géré via la la propriété IsXValueIndexed. Tu peux consulter son tuto http://plasserre.developpez.com/cours/chart/
    N'oubliez pas le tag et

  3. #3
    Membre confirmé Avatar de themadmax
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 446
    Points : 496
    Points
    496
    Par défaut
    Je te conseille de regarde l'application exemple WinFormsChartSamples de Microsoft qui permet pas mal de chose.
    https://www.google.fr/#q=WinFormsChartSamples
    ________________________________________________
    http://bliquid.fr : Blog sur Android et l'Acer Liquid

  4. #4
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Points : 3 102
    Points
    3 102
    Par défaut
    Merci pour vos réponses.

    Concernant l'application "WinFormsChartSamples", c'est par là que j'ai commencé.

    Sinon, j'ai réussi à résoudre mon problème en repartant du début et en prenant le problème différemment.

    -J'ai crée une classe "BindableObject" comprenant trois propriétés : nom, somme des demandes, somme des demandes réalisées.
    -Je groupe mes demandes par contrat dans un IEnumerable<IGrouping<string, Demande>>-Je boucle ensuite sur le contenu de la collection pour construire une liste d'objets "BindableObject"
    -J'utilise cette collection pour alimenter mes charts

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    var demandes = lstDemande.OrderBy(q => q.Contrat).GroupBy(q => q.Contrat);
    List<BindableObject> lstContrats = new List<BindableObject>();
    BindableObject bContrat;
    foreach (var demande in demandes)
    {
    	bContrat = new BindableObject();
    	bContrat.Groupe = qualif.Key;
    	bContrat.Realise = qualif.Count();
    	bContrat.NonRealise = qualif.Where(q => q.Etat == "Soldée").Count();
    	lstContrats.Add(bContrat);
    }
     
    Series Contrats = ChartContrat.Series.Add("demandées");
    Contrats.ChartType = SeriesChartType.Column;
     
    Series ContratsR = ChartContrat.Series.Add("réalisées");
    ContratsR.ChartType = SeriesChartType.Column;
     
    foreach (BindableObject group in lstContrats)
    {
    	Contrats.Points.Add(new DataPoint()
    	{
    		Label = group.Realise.ToString(),
    		YValues = new Double[] { group.Realise },
    		AxisLabel = group.Groupe
    	});
    	ContratsR.Points.Add(new DataPoint()
    	{
    		Label = group.NonRealise.ToString(),
    		YValues = new Double[] { group.NonRealise },
    		AxisLabel = group.Groupe
    	});
    }
     
    ChartContrat.ChartAreas["ChartArea1"].Area3DStyle.Enable3D = true;
    ChartContrat.ChartAreas["ChartArea1"].AxisX.LabelStyle.Interval = 1;
    et la classe BindableObject :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    public class BindableGroupedQualifs
    {
        public int SommeRealise { get; set; }
        public int Somme { get; set; }
        public string Groupe { get; set; }
     
        public BindableGroupedQualifs() { }
     
        public BindableGroupedQualifs(int Somme , int Somme Realise, string groupe) 
        {
            this.SommeRealise = SommeRealise;
            this.Somme = Somme;
            this.Groupe = groupe;
        }
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Auto-increment : valeurs manquantes ?
    Par kileak dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 12/11/2006, 16h23
  2. Comment trouver les valeurs manquante d'une série ?
    Par NicoNGRI dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 17/10/2006, 09h38
  3. sélection multiple de valeurs dans un seul champ
    Par antoine0207 dans le forum Access
    Réponses: 4
    Dernier message: 04/07/2006, 17h01
  4. [Oracle 8] Jointure externe multiple et valeurs nulles !!!
    Par nsonnier dans le forum Langage SQL
    Réponses: 2
    Dernier message: 20/03/2006, 22h22
  5. [debutant][code] insert multiple de valeurs
    Par topaze dans le forum Oracle
    Réponses: 9
    Dernier message: 29/11/2005, 15h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo