2017-09-26 2 views
0

J'ai une table nommée tblWeeklyAudit qui contient plus d'une ligne de données. Je veux le lire et le montrer sur le graphique en direct. le code est montré ci-dessous en utilisant.Obtention de données de graphique en direct à partir de la base de données

using LiveCharts; 
using LiveCharts.Wpf; 
using System; 
using System.Configuration; 
using System.Data; 
using System.Data.SqlClient; 
using System.Windows; 
using static MAS.clsPUB; 

namespace MAS.Windows 
{ 
    /// <summary> 
    /// Interaction logic for Dash.xaml 
    /// </summary> 
    public partial class Dash : Window 
    { 
     public SeriesCollection SeriesCollection { get; set; } 
     public string[] Labels { get; set; } 
     //public Func<double, string> YFormatter { get; set; } 


     public Dash() 
     { 
      InitializeComponent(); 
      LoadData(); 
     } 

     private void LoadData() 
     { 
      double test =0; 
      if (CON.State == ConnectionState.Open) 
      { 
       CON.Close(); 
      } 

      CON.ConnectionString = ConfigurationManager.ConnectionStrings["conDB"].ConnectionString; 
      CON.Open(); 
      CMD = new SqlCommand("select * from tblWeeklyAudit", CON); 
      RDR = CMD.ExecuteReader(); 
      if (RDR.Read()) 
      { 
       test = Convert.ToDouble(RDR["Defects"]); 
      } 


      SeriesCollection = new SeriesCollection 
      { 
       new LineSeries 
       { 
        Values = new ChartValues<double> { test } 
       }, 

      }; 

      Labels = new[] { "Jan", "Feb", "Mar", "Apr", "May" }; 


      DataContext = this; 
     } 
    } 
} 

Les valeurs du graphique sont données par cette ligne et j'ai appelé la table tblWeeklyAudit et de la table des défauts. Il dispose de plusieurs lignes de valeur flottante

Values = new ChartValues<double> { test } 
+0

des thats nice - Quelle est votre question/problème? – BugFinder

+0

J'ai besoin de savoir comment obtenir un ensemble de données à partir d'une base de données et de l'afficher sur le graphique. Comme le code s'exécute, il ne récupère qu'une donnée et pas toutes les données de la table. –

+0

Vous n'avez pas de boucle pour lire plus d'un élément de données - vous devriez commencer à y chercher. – BugFinder

Répondre

1

Ajouter les doubles valeurs à un List<double> que vous passez ensuite au constructeur de la classe ChartValues<double>:

private void LoadData() 
{ 
    List<double> allValues = new List<double>(); 
    if (CON.State == ConnectionState.Open) 
    { 
     CON.Close(); 
    } 

    CON.ConnectionString = ConfigurationManager.ConnectionStrings["conDB"].ConnectionString; 
    CON.Open(); 
    CMD = new SqlCommand("select * from tblWeeklyAudit", CON); 
    RDR = CMD.ExecuteReader(); 
    while (RDR.Read()) 
    { 
     allValues.Add(Convert.ToDouble(RDR["Defects"])); 
    } 

    SeriesCollection = new SeriesCollection 
      { 
       new LineSeries 
       { 
        Values = new ChartValues<double>(allValues) 
       } 
      }; 

    Labels = new[] { "Jan", "Feb", "Mar", "Apr", "May" }; 


    DataContext = this; 
} 
+0

Merci accouplent cela a fonctionné! :) –

0

Pour lire plus d'une ligne procédez comme suit:

var List<double> allValues = new List<double>(); 

if (RDR.HasRows) 
     { 
      while (RDR.Read()) 
      { 
       allValues.Add(Convert.ToDouble(RDR["Defects"])); 
      } 
     } 

Ensuite, utilisez allvalues ​​dans votre SeriesCollection.

+0

puis-je savoir comment ajouter 'allValues' à ** ici ** ' SeriesCollection = new SeriesCollection { nouveaux LineSeries { valeurs = new ChartValues ​​ {** Voici **}} }; ' –