【问题标题】:Getting Live Chart data from database从数据库中获取实时图表数据
【发布时间】:2018-01-10 12:45:25
【问题描述】:

我有一个名为 tblWeeklyAudit 的表,其中包含多行数据。我想阅读它并在实时图表上显示它。代码如下所示。

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

图表值由这一行给出,我从该缺陷表中调用了表 tblWeeklyAudit。它有几个浮点值行

Values = new ChartValues<double> { test }

【问题讨论】:

  • 很好 - 你的问题/问题是什么?
  • 我需要知道如何从数据库中获取一组数据并将其显示在图表上。当代码运行时,它只检索一个数据而不是表中的所有数据
  • 您没有循环读取超过 1 项数据 - 您应该从那里开始查找。
  • 是的,但问题是这个 SeriesCollection = new SeriesCollection { new LineSeries { Values = new ChartValues { 2,5,3,4 } }, };值应该和上面一样不能一一相加
  • 但是您只从查询中读取了 1 行数据! docs.microsoft.com/en-us/dotnet/framework/data/adonet/…

标签: c# wpf charts livecharts


【解决方案1】:

将双精度值添加到 List&lt;double&gt;,然后将其传递给 ChartValues&lt;double&gt; 类的构造函数:

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

【讨论】:

    【解决方案2】:

    要阅读多行,请执行以下操作:

    var List<double> allValues = new List<double>();
    
    if (RDR.HasRows)
            {
                while (RDR.Read())
                {
                   allValues.Add(Convert.ToDouble(RDR["Defects"]));
                }
            }
    

    然后在您的 SeriesCollection 中使用 allValues。

    【讨论】:

    • 我能知道如何将allValues 添加到这里 SeriesCollection = new SeriesCollection { new LineSeries { Values = new ChartValues&lt;double&gt; { **Here** } } };
    猜你喜欢
    • 2019-01-17
    • 1970-01-01
    • 1970-01-01
    • 2021-03-04
    • 2021-03-10
    • 2021-08-23
    • 2019-07-12
    • 2019-09-30
    • 2011-08-26
    相关资源
    最近更新 更多