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 :

Approvisionner mon graphique avec ma base de donnée


Sujet :

C#

  1. #1
    Invité
    Invité(e)
    Par défaut Approvisionner mon graphique avec ma base de donnée
    Bonjour
    Je connais en ce moment un probleme et je ne sais comment m'y prendre pour le resoudre.

    J'ai creer un graphique en Silverlight et C#
    Ce graphique est apprisionner en donnees depuis une source statique (qui ne change pas). Je vous met le code en bas :

    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
     
    private List<GDPData> Data
            {
                get
                {
                    List<GDPData> gdpData = new List<GDPData>();
     
                    gdpData.Add(new GDPData("EU", 18387785));
                    gdpData.Add(new GDPData("Japan", 4910692));
                    gdpData.Add(new GDPData("Russia", 1676586));
                    gdpData.Add(new GDPData("Spain", 1601964));
                    gdpData.Add(new GDPData("France", 2866951));
                    gdpData.Add(new GDPData("USA", 14441425));
                    gdpData.Add(new GDPData("Germany", 3673105));
                    gdpData.Add(new GDPData("Italy", 2313893));
                    gdpData.Add(new GDPData("China", 4327448));
                    gdpData.Add(new GDPData("UK", 2680000));
     
                    return gdpData;
                }
            }
    Maintenant je voudrais remplacer ces donnees par celle contenues dans ma base de donnee.
    Je voudrais que a la place de ces 10 sources de donnees apprivisionnant mon graphique, puisse provenir d'une base de donnee que j'ai deja cree au prealable.

    Merci de m'indiquer comment m'y prendre ou bien de m'indiquer un tutoriel qui pourrai m'aider dans cette entreprise.

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 742
    Points
    9 742
    Billets dans le blog
    3
    Par défaut
    Bonjour,

    Quel serveur de base de données utilisez-vous ? SQL Server ? Access ? Autre ?

  3. #3
    Expert éminent
    Avatar de Webman
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 232
    Points : 8 154
    Points
    8 154
    Par défaut
    Bonjour,

    Bonne question de Matt07, il faut d'abord savoir quelle est la base de données. Mais sinon sur le principe cela ne va pas varier fondamentalement.

    Il va falloir que tu exécutes une reqûete SQL vers la base de données (ou un procédure stockée, c'est au choix) qui va retourner la liste des données.

    Ensuite tu vas récupérer le résultat et le placer dans une structure (liste, dataset, etc etc...) pour ensuite les lier à ton control.

    A première vue les données sont simples, peu nombreuses et ne doivent pas être mise à jour, donc pas la peine de sortir l'artillerie lourde pour si peu (pas d'Entity Framework par exemple ).

    Si jamais il s'agit de SQL Server voici un petit tuto pour commencer:
    http://webman.developpez.com/article...ameter/csharp/

    Ce tuto explique comment effectuer des requête paramétrer proprement, c'est à dire sans s'exposer à des problèmes de sécurité à cause de requête SQL concaténées à la volée ou en dur dans un fichier de configuration.

    Bonne chance, et merci de nous indiquer quel est le serveur de base de données que tu utilises.

    Cordialement,
    Ronald

  4. #4
    Invité
    Invité(e)
    Par défaut
    J'utilise Microsoft SQL Server 2008 (Compact Edition) pour ma base de données.
    Dernière modification par Invité ; 04/10/2010 à 14h42.

  5. #5
    Expert éminent
    Avatar de Webman
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 232
    Points : 8 154
    Points
    8 154
    Par défaut
    Bonjour,

    Faut pas paniquer comme ça, laisse juste le temps au gens de revenir sur le forum . Requêter une base SQL Server Compact Edition n'est pas plus compliqué que de requêter n'importe quelle base SQL Server il faut juste faire attention à utiliser le bon provider (System.Data.SqlServerCe au lieu de System.Data.SqlClient pour un SQL non CE). Voici la documentation issue de MSDN qui explique comment requêter une base CE avec C#:

    http://msdn.microsoft.com/en-us/libr...cecommand.aspx

    Voici le code extrait de MSDN :

    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
    SqlCeConnection conn = null;SqlCeDataReader rdr = null;
     
    try
    {
        conn = new SqlCeConnection(connStr);
        conn.Open();
     
        SqlCeCommand cmd = new SqlCeCommand("SELECT * FROM myTable", conn);
        cmd.Connection.Open();
     
        rdr = cmd.ExecuteReader();
     
        while (rdr.Read())
        {
            Console.WriteLine(rdr.GetString(0));
        }
    }
    finally
    {
        rdr.Close();
        conn.Close();
    }
    Si tu as la moindre question n'hésites pas à revenir vers nous. Mais rassure toi il n'y a rien de complexe a ce que tu veux faire. Un Select dans une base de données depuis .Net c'est difficile de faire plus simple.

    PS: voici un autre article qui pourra t'aider.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Merci pour ta reponse.

    mais malgre que j'ai le code mais je ne sais pas comment m'y prendre.

    Est ce que je dois ajoute un service WCF et par la suite ajouter le web service a la solution, vu que c'est en silverlight ou bien je fais quoi.

    Merci de m'eclairer sur la procedure a suivre pour pouvoir utiliser cette methode.

  7. #7
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2008
    Messages
    337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 337
    Points : 456
    Points
    456
    Par défaut
    Comme ceci :

    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
     
     
    private List<GDPData> Data
            {
                get
                {
                    List<GDPData> gdpData = new List<GDPData>();
     
                    conn = new SqlCeConnection(connStr);
                    conn.Open();
     
                    SqlCeCommand cmd = new SqlCeCommand("SELECT * FROM myTable", conn);
                   cmd.Connection.Open();
     
                   rdr = cmd.ExecuteReader();
     
                   while (rdr.Read())
                  {
                           gdpData.Add(new GDPData(rdr["Pays"].ToString(), (int)rdr["Statistique"])); // Pays et Statistique étant les noms des champs de ta table sql.
     
                  }
    }

  8. #8
    Invité
    Invité(e)
    Par défaut
    Merci beaucoup. je vais tester ca tout de suite.
    mais juste une question
    est ce qu'il n'y a de namespace ou de reference specifique a ajouter au projet.

    C'est un projet silverlight/C#

  9. #9
    Invité
    Invité(e)
    Par défaut
    Ok j'ai essaye mais j'ai une erreure :

    Error 1 A get or set accessor expected
    Bon je te décris ce que j'ai fait :
    Je créer un projet Silverlight.
    Je créer ma base de données.
    Je l'ajoute au projet Silverlight avec Linq To SQL
    Puis j'ajoute un service web au projet silverlight
    Puis je tape le code dans cette page MainPage.xaml.cs

    mais quand je compile j'ai cette erreur
    Error 1 A get or set accessor expected
    Voila le code de mon fichier mainpage.xaml.cs ou ce touve List<GDPData> gdpData que je doit approvisionner depuis ma BDD

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
     using System.Collections.Generic;
    using System.ComponentModel;
    using System.Linq;
    using System.Windows;
    using System.Windows.Controls;
    using Telerik.Windows.Controls;
    using Telerik.Windows.Controls.Charting;
    using Telerik.Windows.Data;
    #if SILVERLIGHT
    using SelectionChangedEventArgs = Telerik.Windows.Controls.SelectionChangedEventArgs;
    #endif
     
    namespace RadControlsWpfApp22
    {
        /// <summary>
        /// Interaction logic for MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            private List<GDPData> Data
            {
                get
                {
                    List<GDPData> gdpData = new List<GDPData>();
     
                    gdpData.Add(new GDPData("Philosophy", 18387785));
                    gdpData.Add(new GDPData("French", 4910692));
                    gdpData.Add(new GDPData("English", 1676586));
                    gdpData.Add(new GDPData("Hist. & Geo.", 1601964));
                    gdpData.Add(new GDPData("Mathematics", 2866951));
                    gdpData.Add(new GDPData("Physic & Chimistry", 14441425));
                    gdpData.Add(new GDPData("Life and Soil Sc.", 3673105));
                    gdpData.Add(new GDPData("Artistic Edu.", 2313893));
                    gdpData.Add(new GDPData("Computer Sc.", 4327448));
                    gdpData.Add(new GDPData("P.S.T.", 2680000));//Physical and Sporting Tests
     
                    return gdpData;
                }
            }
     
            public MainWindow()
            {
                InitializeComponent();
                CountriesBox.ItemsSource = this.Data;
     
                this.ConfigureChart();
            }
     
     
     
             private void ConfigureChart()
            {
                RadChart1.DefaultView.ChartTitle.Content = "Top 10 Countries by GDP 2008 (nominal)";
                RadChart1.DefaultSeriesDefinition.ShowItemToolTips = true;
                RadChart1.DefaultSeriesDefinition.ItemToolTipFormat = "#Y{C0} million";
                RadChart1.DefaultView.ChartArea.AxisY.Title = "GDP (mil USD)";
                RadChart1.DefaultView.ChartArea.EnableAnimations = false;
                RadChart1.DefaultSeriesDefinition.LegendDisplayMode = LegendDisplayMode.DataPointLabel;
     
                SeriesMapping gdpSeriesMapping = new SeriesMapping();
                gdpSeriesMapping.LegendLabel = "GDP (millions of USD)";
                gdpSeriesMapping.ItemMappings.Add(new ItemMapping("Country", DataPointMember.XCategory));
                gdpSeriesMapping.ItemMappings.Add(new ItemMapping("GDP", DataPointMember.YValue));
                gdpSeriesMapping.ItemMappings.Add(new ItemMapping("Country", DataPointMember.LegendLabel));
     
                RadChart1.SeriesMappings.Add(gdpSeriesMapping);
     
                RadChart1.ItemsSource = this.Data;
            }
     
            private void SortSelectionChanged(object sender, SelectionChangedEventArgs e)
            {
                if (RadChart1 == null || SortGDP == null || SortCountry == null)
                    return;
     
                RadChart1.SortDescriptors.SuspendNotifications();
                RadChart1.SortDescriptors.Clear();
     
                string sortByCountry = (SortCountry.SelectedValue as RadComboBoxItem).Content as string;
                string sortByGDP = (SortGDP.SelectedValue as RadComboBoxItem).Content as string;
     
                this.ApplySorting(sortByCountry, "Country");
                this.ApplySorting(sortByGDP, "GDP");
     
                RadChart1.SortDescriptors.ResumeNotifications();
            }
     
            private void CheckBox_Checked(object sender, RoutedEventArgs e)
            {
                CheckBox sourceCheckbox = e.OriginalSource as CheckBox;
                Queue<ChartFilterDescriptor> filtersToRemove = new Queue<ChartFilterDescriptor>();
     
                foreach (ChartFilterDescriptor descriptor in RadChart1.FilterDescriptors)
                {
                    if (descriptor.Value.Equals(sourceCheckbox.Content))
                        filtersToRemove.Enqueue(descriptor);
                }
     
                foreach (ChartFilterDescriptor descriptor in filtersToRemove)
                    RadChart1.FilterDescriptors.Remove(descriptor);
            }
     
            private void CheckBox_Unchecked(object sender, RoutedEventArgs e)
            {
                CheckBox sourceCheckbox = e.OriginalSource as CheckBox;
     
                RadChart1.FilterDescriptors.Add(new ChartFilterDescriptor("Country", typeof(string), FilterOperator.IsNotEqualTo, sourceCheckbox.Content));
     
            }
     
            private void ApplySorting(string sortDirection, string fieldName)
            {
                if (sortDirection.ToLower() != "none")
                {
                    if (sortDirection.ToLower() == "asc")
                        RadChart1.SortDescriptors.Add(new ChartSortDescriptor(fieldName, ListSortDirection.Ascending));
                    else
                        RadChart1.SortDescriptors.Add(new ChartSortDescriptor(fieldName, ListSortDirection.Descending));
                }
            }
     
            public class GDPData
            {
                private string _country;
                private decimal _gdp;
     
                public string Country
                {
                    get
                    {
                        return this._country;
                    }
                    set
                    {
                        this._country = value;
                    }
                }
     
                public decimal GDP
                {
                    get
                    {
                        return this._gdp;
                    }
                    set
                    {
                        this._gdp = value;
                    }
                }
     
                public GDPData(string country, decimal gdp)
                {
                    this.GDP = gdp;
                    this.Country = country;
                }
     
     
            }
     
        }
    }
    Pouvez vous m'indiquer la demarche a suivre. Je suis completement perdu avec cette histoire.

    Merci de bien vouloir m'aider
    Dernière modification par Deepin ; 05/10/2010 à 13h16. Motif: Balises [QUOTE]...[/QUOTE] au lieu de [CODE]...[/CODE]

Discussions similaires

  1. Réponses: 4
    Dernier message: 25/02/2014, 17h15
  2. Réponses: 0
    Dernier message: 11/01/2011, 23h04
  3. Réponses: 4
    Dernier message: 28/03/2010, 19h28
  4. relier mon site avec la base de donnée amadeus
    Par inizar dans le forum Débuter
    Réponses: 2
    Dernier message: 10/10/2008, 21h30
  5. Réponses: 1
    Dernier message: 29/02/2008, 01h56

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