【问题标题】:How to show date as X-axis label on microsoft chart如何在微软图表上将日期显示为 X 轴标签
【发布时间】:2013-11-20 17:35:19
【问题描述】:

我在这里试图弄清楚如何获取我的图表,该图表是背后的代码,以按日期显示点。我的观点显示得非常好,但是每当我尝试将 x 轴标签设置为数据库中的日期时,程序就会很合适。有人可以告诉我如何在代码中执行此操作吗?

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
using System.Data;
using System.Data.SqlServerCe;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;


namespace BgTracker.NET.Reports
{

    public partial class BPChart : Form
    {
    private System.Windows.Forms.DataVisualization.Charting.Chart chart1;
        public BPChart()
        {
            InitializeComponent();
        }
        private void BPChart_Load(object sender, EventArgs e)
        {
            chart1 = new Chart();

            ChartArea chartArea1 = new ChartArea();
            chart1.ChartAreas.Add(chartArea1);
            chart1.ChartAreas["ChartArea1"].AxisX.Title = "Dates";
            chart1.ChartAreas["ChartArea1"].AxisY.Title = "BP Rates";
            Series series1 = new Series();
            Series series2 = new Series();
            Series series3 = new Series();

            // Add data points to the first series
            string ConnStr1 = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
            SqlCeConnection conn = new SqlCeConnection(ConnStr1);
            string GetBPReadings = "SELECT Systolic, Diastolic, DateVal from Bp where DateVal BETWEEN '5/1/2000' AND '5/8/2000'";
            SqlCeCommand cmd = new SqlCeCommand(GetBPReadings, conn);
            conn.Open();
            SqlCeDataReader rdrBP = cmd.ExecuteReader();
            while (rdrBP.Read())
            {
                series1.Points.Add(Convert.ToInt32(rdrBP.GetValue(0).ToString()));
                series2.Points.Add(Convert.ToInt32(rdrBP.GetValue(1).ToString()));
                series3.AxisLabel = rdrBP.GetValue(2).ToString();
            }
            conn.Close();

            chart1.Series.Add(series1);
            chart1.Series.Add(series2);

            chart1.Series["Series1"].ChartType = SeriesChartType.Line;
            chart1.Series["Series2"].ChartType = SeriesChartType.Line;

            chart1.Series["Series1"].Color = System.Drawing.Color.Red;
            chart1.Series["Series2"].Color = System.Drawing.Color.Blue;

            // Set chart control location
            chart1.Location = new System.Drawing.Point(0, 0);

            // Set Chart control size
            chart1.Size = new System.Drawing.Size(800, 600);

            // Add chart control to the form
            this.Controls.AddRange(new System.Windows.Forms.Control[] {this.chart1 } );
        }
    }
}

【问题讨论】:

  • 你能比“投球合适”更具体吗?你有例外吗?哪一行代码导致挂起,如果有的话?
  • 我的意思是它完全忽略了我设置 X 轴标签的尝试。我认为将 X 轴设置为系列 3 可以解决问题,但没有骰子。所有轴标签显示为 1 2 3 4 等等。

标签: winforms .net-4.0 charts controls reporting


【解决方案1】:

我终于弄清楚了我错过了什么。要显示数据库中的日期,您必须将它们设置为系列中的点。为了帮助别人,这里是我用来做的代码。

    private void BPChart_Load(object sender, EventArgs e)
    {
        chart1 = new Chart();

        ChartArea chartArea1 = new ChartArea();
        chart1.ChartAreas.Add(chartArea1);
        chart1.ChartAreas["ChartArea1"].AxisX.Title = "Dates";
        chart1.ChartAreas["ChartArea1"].AxisY.Title = "BP Rates";
        Series series1 = new Series();
        Series series2 = new Series();

        chart1.Series.Add(series1);
        chart1.Series.Add(series2);

        // Add data points to the first series
        int i = 0;
        string ConnStr1 = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
        SqlCeConnection conn = new SqlCeConnection(ConnStr1);
        string GetBPReadings = "SELECT Systolic, Diastolic, [Date] from Bp where [Date] BETWEEN '5/1/2000' AND '5/8/2000'";
        SqlCeCommand cmd = new SqlCeCommand(GetBPReadings, conn);
        conn.Open();
        SqlCeDataReader rdrBP = cmd.ExecuteReader();
        while (rdrBP.Read())
        {
            series1.Points.Add(Convert.ToInt32(rdrBP.GetValue(0).ToString()));
            series2.Points.Add(Convert.ToInt32(rdrBP.GetValue(1).ToString()));
            chart1.Series["Series1"].Points[i].AxisLabel = rdrBP.GetValue(2).ToString();
            i++;
        }
        conn.Close();

        chart1.Series["Series1"].ChartType = SeriesChartType.Line;
        chart1.Series["Series2"].ChartType = SeriesChartType.Line;

        chart1.Series["Series1"].Color = System.Drawing.Color.Red;
        chart1.Series["Series2"].Color = System.Drawing.Color.Blue;

        // Set chart control location
        chart1.Location = new System.Drawing.Point(0, 0);

        // Set Chart control size
        chart1.Size = new System.Drawing.Size(800, 600);

        // Add chart control to the form
        this.Controls.AddRange(new System.Windows.Forms.Control[] { this.chart1 });
    }
}

【讨论】:

    猜你喜欢
    • 2019-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多