中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用C#實現運行狀態堆疊柱狀圖

發布時間:2022-02-14 09:45:23 來源:億速云 閱讀:571 作者:小新 欄目:開發技術

小編給大家分享一下如何使用C#實現運行狀態堆疊柱狀圖,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

具體內容如下

需求通過柱狀圖顯示設備運行時間停止時間,稼動率等
通過數據庫查詢記錄,按小時顯示顯示目標數據。

界面設計

添加用戶控件(窗體)

如何使用C#實現運行狀態堆疊柱狀圖

代碼如下

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;

namespace TestRunChart
{

    public partial class SysTimeBarChart : UserControl
    {
        public List<SysTimeCnt> ListAllTime=new List<SysTimeCnt>();
        public SysTimeBarChart()
        {
            InitializeComponent();
            this.chart1.Series.Clear();
            
        }    
        public DateTime timeStart
        { 
            get{
                DateTime Time1 = this.dateTimePickerLast.Value;
                DateTime Time2 = this.dateTimePickerStart.Value;
                return Time1 >= Time2? Time2 : Time1;
            }   
        }
        public DateTime timeEnd
        {
            get
            {
                DateTime Time1 = this.dateTimePickerLast.Value;
                DateTime Time2 = this.dateTimePickerStart.Value;
                return Time1 > Time2 ? Time1 : Time2;
            }
        }
        public int Hours
        {
            get
            {
                TimeSpan ts1 = new TimeSpan(timeStart.Ticks);
                TimeSpan ts2 = new TimeSpan(timeEnd.Ticks);
                TimeSpan ts = ts1.Subtract(ts2).Duration();
                return ts.Hours;
            }
        }
        public int Days
        {
            get
            {
                TimeSpan ts1 = new TimeSpan(timeStart.Ticks);
                TimeSpan ts2 = new TimeSpan(timeEnd.Ticks);
                TimeSpan ts = ts1.Subtract(ts2).Duration();
                return ts.Days;
            }
        }
        private void btn_GetChart_Click(object sender, EventArgs e)
        {
            // 判斷時間設置
            if (Hours == 0)
                MessageBox.Show("時間設置間隔小于1小時,請重新設置時間", "警告", MessageBoxButtons.OK);
            else if(Days != 0)
                MessageBox.Show("時間間隔大于24小時,請重新設置時間", "警告", MessageBoxButtons.OK);
            else
                Plot();
        }

        private void btn_clear_Click(object sender, EventArgs e)
        {
            this.chart1.Series.Clear();                 
            this.chart1.Legends.Clear();
            this.chart1.ChartAreas.Clear();
            ListAllTime.Clear();
        }
        /// <summary>
        ///  圖表繪制
        /// </summary>
        private void Plot()
        {
            this.chart1.Series.Clear();                  // 清空圖表
            this.chart1.Legends.Clear();
            this.chart1.ChartAreas.Clear();
            if (ListAllTime == null || ListAllTime.Count == 0)
            { MessageBox.Show("數據為空"); return; }
            // 輔助設置
            AxiesSet();
            LegendSet();
            // 表格繪制
            if (this.rbt_runTime.Checked)
                ChartPlot(TimeType.RunTime);
            else if (this.rbt_StopTime.Checked)
                ChartPlot(TimeType.StopTime);
            else if (this.rbt_almtime.Checked)
                ChartPlot(TimeType.AlmTime);
            else if (this.rbt_runrate.Checked)
                ChartPlot(TimeType.RunRate);
            else
            {
                ChartPlot(TimeType.RunTime);
                ChartPlot(TimeType.StopTime);
                ChartPlot(TimeType.AlmTime);
                ChartPlot(TimeType.RunRate);
            }
        }
        enum TimeType
        {
            RunTime,
            AlmTime,
            StopTime,
            RunRate
        }
        /// <summary>
        ///  數據繪制
        /// </summary>
        /// <param name="seriesName">數據名字</param>
        /// <param name="data">數據</param>
        /// <param name="chartType">chart類型</param>
        /// <param name="isPrimary">是否為主軸數據</param>
        private void ChartPlot(TimeType type)
        {
            string seriesName = "";
            SeriesChartType chartType = SeriesChartType.StackedColumn;
            bool isPrimary = true;
            switch (type)
            {
                case TimeType.RunTime:
                    seriesName = "運行時間"; break;
                case TimeType.StopTime:
                    seriesName = "待機時間"; break;
                case TimeType.AlmTime:
                    seriesName = "報警時間"; break;
                case TimeType.RunRate:
                    seriesName = "稼動率";
                    chartType = SeriesChartType.Line;
                    isPrimary = false;//非主軸,右邊軸
                    break;
                default: break;
            }
            Series series = this.chart1.Series.Add(seriesName);
            series.ChartType = chartType;       // 圖表類型
            series.YAxisType = isPrimary ? AxisType.Primary : AxisType.Secondary;
            series.BorderWidth = 2;
            series.Label = isPrimary ? "#VAL" : "#VAL{P}";
            int i = 0;
            foreach (var m in ListAllTime)
            {
                double mvalue = 0;
                switch (type)
                {
                    case TimeType.RunTime:
                        mvalue = m.RunTime; break;
                    case TimeType.StopTime:
                        mvalue = m.StopTime; break;
                    case TimeType.AlmTime:
                        mvalue = m.AlmTime; break;
                    case TimeType.RunRate:
                        mvalue = m.RunRate; break;
                    default: break;
                }
                series.Points.AddXY(i, mvalue);
                i++;
            }
        }

        /// <summary>
        /// 坐標軸設置
        /// </summary>
        private void AxiesSet()
        {
            ChartArea chartAreas = this.chart1.ChartAreas.Add("ChartAreas");
            chartAreas.AxisX.MajorGrid.Enabled = false;             // 坐標軸
            chartAreas.AxisY.MajorGrid.Enabled = false;             // Y軸主軸
            chartAreas.AxisY.Maximum = 60;
            chartAreas.AxisY2.MajorGrid.Enabled = false;            // Y軸次軸
            chartAreas.AxisY2.Enabled = AxisEnabled.True;
            chartAreas.AxisY2.LabelStyle.Format = "0%";
            chartAreas.AxisY2.Maximum = 1;
        }

        /// <summary>
        ///  標簽設置
        /// </summary>
        private void LegendSet()
        {
            Legend legend = this.chart1.Legends.Add("Legend");
            legend.Alignment = StringAlignment.Center;              // 標簽居中
            legend.Docking = Docking.Top;                           //     上方
        }
        /// <summary>
        /// 初始化數據列,默認全部停止時間
        /// </summary>
        /// <param name="brandom"></param>
        /// <returns></returns>
        public bool InitDataList(bool brandom=false)
        {
            if (Days != 0)
            { MessageBox.Show("時間設置異常"); return false; }
            var startTime = timeStart;
            ListAllTime.Clear();
            Random rd = new Random();
            for (int i = 0; i <= Hours; i++)
            {

                var num = rd.Next(0, 59);
                SysTimeCnt mCnt = new SysTimeCnt()
                {
                    _InSertTime = string.Format("{0:yyyy-MM-dd-HH-mm}", startTime),
                    RunTime = brandom? num:0,
                    AlmTime = brandom ? rd.Next(0, 60 - num):0
                };
                ListAllTime.Add(mCnt);
                startTime.AddHours(1);
            }
            return true;
        }
    }
    public class SysTimeCnt
    {
        public string _InSertTime;
        public string InSertTime => _InSertTime;
        public void UpdateInSertTime()
        {
            _InSertTime = string.Format("{0:yyyy-MM-dd-HH-mm}", DateTime.Now);
        }
        public double RunTime;
        public double AlmTime;
        public double StopTime
        {
            get { return 60 - RunTime - AlmTime; }

        }
        public double RunRate
        {
            get { return Math.Round(Convert.ToDouble(this.RunTime / 60), 2); }
        }
    }
}

主窗體代碼

 public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btn_AddData_Click(object sender, EventArgs e)
        {
            var bSucessd = sysTimeBarChart1.InitDataList(true);
            if (bSucessd)
                MessageBox.Show("完成");
        }
    }

顯示效果

如何使用C#實現運行狀態堆疊柱狀圖

以上是“如何使用C#實現運行狀態堆疊柱狀圖”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

锦屏县| 北碚区| 寻乌县| 穆棱市| 乌鲁木齐市| 仁化县| 凉城县| 定襄县| 中牟县| 仲巴县| 新建县| 万源市| 浠水县| 湖州市| 手游| 耿马| 赞皇县| 密山市| 建宁县| 醴陵市| 新郑市| 大名县| 泸水县| 隆回县| 雷州市| 龙口市| 广饶县| 普兰店市| 康保县| 墨脱县| 遵义市| 湛江市| 宁安市| 扶风县| 五河县| 永年县| 宜章县| 瑞丽市| 株洲县| 静海县| 盐津县|