簡體   English   中英

ASP.NET圖表:如何使用for循環繪制序列點

[英]ASP.NET Chart: How to plot series points using for loop

我已經以編程方式構建了圖表,但是現在要做的是格式化X軸,以便每個點都以24小時制表示一天中的某個時間。

我想從“ 04:00:00”開始時間,並以15分鍾的間隔一直到“ 16:00:00”-我需要在X軸上繪制40個點。 不用擔心Y軸值。 我有一個想法,我想做什么來使用數據庫填充這些值。

到目前為止,這是我已經開始的工作(如下所示),但是我還無法想象如何使用for循環來使這項工作成為可能。

有人可以深入了解我如何實現這一目標嗎?

//for (int i = 0; i < 41; i++)
    //{
    Chart1.Series[0].Points.AddXY("04:00:00", 5);
    Chart1.Series[0].Points.AddXY("04:15:00", 10);
    Chart1.Series[0].Points.AddXY("04:30:00", 15);
    Chart1.Series[0].Points.AddXY("04:45:00", 25);
    ...
    ...
    ...
    Chart1.Series[0].Points.AddXY("16:00:00", 25);
//}

這是我的整個代碼:僅供參考。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.DataVisualization.Charting;

namespace DishMES
{
   public partial class WebForm1 : System.Web.UI.Page
   {
    protected void Page_Load(object sender, EventArgs e)
    {
        buildRepairedChart();
    }

    public void buildRepairedChart()
    {
        //CREATE CHART
        Chart1.Height = Unit.Pixel(200);
        Chart1.Width = Unit.Pixel(900);

        //DEFINE CHART AREA
        ChartArea chartArea = new ChartArea();
        Chart1.ChartAreas.Add(chartArea);

        ChartArea3DStyle areaStyle = new ChartArea3DStyle(chartArea);
        areaStyle.Rotation = 0;
        Axis yAxis = new Axis(chartArea, AxisName.Y);
        Axis xAxis = new Axis(chartArea, AxisName.X);
        var ca = Chart1.ChartAreas[0];
        ca.AxisX.LabelStyle.Format = "hh:mm:ss";
        ca.AxisX.Minimum = 0;
        ca.AxisX.Interval = 1;


        // BUILD CHART SERIES
        Series series = new Series("Default");
        Chart1.Series.Add(series);
        var s = Chart1.Series[0];
        s.ToolTip = "#VALX{t}";
        s.XValueType = ChartValueType.Time;

        //TIME STUFF


        // BIND DATA TO CHART
        //for (int i = 0; i < 41; i++)
        //{
        Chart1.Series[0].Points.AddXY("04:00:00", 5);
        Chart1.Series[0].Points.AddXY("04:15:00", 10);
        Chart1.Series[0].Points.AddXY("04:30:00", 15);
        Chart1.Series[0].Points.AddXY("04:45:00", 25);
        //}
        Chart1.DataBind();
    }
}

}

假設您的數據來自列表或數據集等source

Series s = new Series();
int i=0;
foreach(var d in source)
{
    s.Points.AddXY(d.Date, d.Point); //or d.Key,d.Value, or d["Date"],d["Point"]
}

Chart1.Series.Add(s);

我非常希望您不必手動繪制日期。

var list = new Dictionary<DateTime,object>();
DateTime start = DateTime.ParseExact(
        "3:45:00 AM", 
        "h:mm:ss tt", 
        CultureInfo.InvariantCulture);
for(int i=0;i<48;i++)
{
    start=start.AddMinutes(15);
    list.add(start,source[i]);
}

然后按照上述步驟進行。

答案是:

        // BIND DATA TO CHART
        for (int i = 0; i < 43; i++)
        {
            //TIME STUFF FOR SQL
            int startBin = 14400;
            int endBin = 15300;
            TimeSpan stime = TimeSpan.FromSeconds(startBin + (i * 900));
            TimeSpan etime = TimeSpan.FromSeconds(endBin + (i * 900));
            string xAxisStart = string.Format("{0:D2}:{1:D2}:{2:D2}", stime.Hours, stime.Minutes, stime.Seconds);
            string xAxisStop = string.Format("{0:D2}:{1:D2}:{2:D2}", etime.Hours, etime.Minutes, etime.Seconds);

            //TARGET SERIES 
            RepairedChart.Series["REPAIRED"].Points.AddXY(xAxisStart, getRepaired2(xAxisStart, xAxisStop));
            RepairedChart.Series["TARGET"].Points.AddXY(xAxisStart, getScheduleRepairTarget(xAxisStart, xAxisStop));
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM