千家信息网

如何使用C#实现运行状态堆叠柱状图

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,小编给大家分享一下如何使用C#实现运行状态堆叠柱状图,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!具体内容如下需求通过柱状
千家信息网最后更新 2026年10月31日如何使用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 ListAllTime=new List();        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();        }        ///         ///  图表绘制        ///         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        }        ///         ///  数据绘制        ///         /// 数据名字        /// 数据        /// chart类型        /// 是否为主轴数据        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++;            }        }        ///         /// 坐标轴设置        ///         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;        }        ///         ///  标签设置        ///         private void LegendSet()        {            Legend legend = this.chart1.Legends.Add("Legend");            legend.Alignment = StringAlignment.Center;              // 标签居中            legend.Docking = Docking.Top;                           //     上方        }        ///         /// 初始化数据列,默认全部停止时间        ///         ///         ///         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# 主轴 代码 坐标 坐标轴 标签 窗体 类型 不怎么 右边 名字 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网与科技 深圳市人人互联网科技有限公司 博彦科技互联网金融 哈尔滨大商圈互联网科技有限公司 盈实互联网科技 互联网巨头科技公司 互联网科技金融公司 深圳天众互联网科技公司 互联网科技论坛 互联网科技公司实习生 亳州好赞互联网科技有限公司 科技互联网的核心竞争力 江苏互联网智能科技软件 互联网科技数字货币 有人说阿里系是互联网科技企业 广州有谷有贝互联网科技有限公司 山东大美朱楼互联网科技有限公司 科技互联网行业投资研究 互联网领先科技活动 互联网时代高科技布局 青岛互联网科技公司 银优互联网科技有限公司 广州市恰铎互联网科技有限公司 允成互联网科技有限公司融资 洛阳共同富裕互联网科技有限公司 佛山市拉法互联网科技有限公司 上海京穆互联网科技有限公司 银川新华互联网科技学校是国营吗 互联网科技的前景 互联网科技企业文化
0