欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#實(shí)現(xiàn)運(yùn)行狀態(tài)堆疊柱狀圖

 更新時(shí)間:2022年02月12日 11:47:13   作者:機(jī)器俠客  
這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)運(yùn)行狀態(tài)堆疊柱狀圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了C#實(shí)現(xiàn)運(yùn)行狀態(tài)堆疊柱狀圖的具體代碼,供大家參考,具體內(nèi)容如下

需求通過柱狀圖顯示設(shè)備運(yùn)行時(shí)間停止時(shí)間,稼動(dòng)率等
通過數(shù)據(jù)庫查詢記錄,按小時(shí)顯示顯示目標(biāo)數(shù)據(jù)。

界面設(shè)計(jì)

添加用戶控件(窗體)

代碼如下

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)
? ? ? ? {
? ? ? ? ? ? // 判斷時(shí)間設(shè)置
? ? ? ? ? ? if (Hours == 0)
? ? ? ? ? ? ? ? MessageBox.Show("時(shí)間設(shè)置間隔小于1小時(shí),請(qǐng)重新設(shè)置時(shí)間", "警告", MessageBoxButtons.OK);
? ? ? ? ? ? else if(Days != 0)
? ? ? ? ? ? ? ? MessageBox.Show("時(shí)間間隔大于24小時(shí),請(qǐng)重新設(shè)置時(shí)間", "警告", 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(); ? ? ? ? ? ? ? ? ?// 清空?qǐng)D表
? ? ? ? ? ? this.chart1.Legends.Clear();
? ? ? ? ? ? this.chart1.ChartAreas.Clear();
? ? ? ? ? ? if (ListAllTime == null || ListAllTime.Count == 0)
? ? ? ? ? ? { MessageBox.Show("數(shù)據(jù)為空"); return; }
? ? ? ? ? ? // 輔助設(shè)置
? ? ? ? ? ? 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>
? ? ? ? /// ?數(shù)據(jù)繪制
? ? ? ? /// </summary>
? ? ? ? /// <param name="seriesName">數(shù)據(jù)名字</param>
? ? ? ? /// <param name="data">數(shù)據(jù)</param>
? ? ? ? /// <param name="chartType">chart類型</param>
? ? ? ? /// <param name="isPrimary">是否為主軸數(shù)據(jù)</param>
? ? ? ? private void ChartPlot(TimeType type)
? ? ? ? {
? ? ? ? ? ? string seriesName = "";
? ? ? ? ? ? SeriesChartType chartType = SeriesChartType.StackedColumn;
? ? ? ? ? ? bool isPrimary = true;
? ? ? ? ? ? switch (type)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? case TimeType.RunTime:
? ? ? ? ? ? ? ? ? ? seriesName = "運(yùn)行時(shí)間"; break;
? ? ? ? ? ? ? ? case TimeType.StopTime:
? ? ? ? ? ? ? ? ? ? seriesName = "待機(jī)時(shí)間"; break;
? ? ? ? ? ? ? ? case TimeType.AlmTime:
? ? ? ? ? ? ? ? ? ? seriesName = "報(bào)警時(shí)間"; break;
? ? ? ? ? ? ? ? case TimeType.RunRate:
? ? ? ? ? ? ? ? ? ? seriesName = "稼動(dòng)率";
? ? ? ? ? ? ? ? ? ? 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>
? ? ? ? /// 坐標(biāo)軸設(shè)置
? ? ? ? /// </summary>
? ? ? ? private void AxiesSet()
? ? ? ? {
? ? ? ? ? ? ChartArea chartAreas = this.chart1.ChartAreas.Add("ChartAreas");
? ? ? ? ? ? chartAreas.AxisX.MajorGrid.Enabled = false; ? ? ? ? ? ? // 坐標(biāo)軸
? ? ? ? ? ? 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>
? ? ? ? /// ?標(biāo)簽設(shè)置
? ? ? ? /// </summary>
? ? ? ? private void LegendSet()
? ? ? ? {
? ? ? ? ? ? Legend legend = this.chart1.Legends.Add("Legend");
? ? ? ? ? ? legend.Alignment = StringAlignment.Center; ? ? ? ? ? ? ?// 標(biāo)簽居中
? ? ? ? ? ? legend.Docking = Docking.Top; ? ? ? ? ? ? ? ? ? ? ? ? ? // ? ? 上方
? ? ? ? }
? ? ? ? /// <summary>
? ? ? ? /// 初始化數(shù)據(jù)列,默認(rèn)全部停止時(shí)間
? ? ? ? /// </summary>
? ? ? ? /// <param name="brandom"></param>
? ? ? ? /// <returns></returns>
? ? ? ? public bool InitDataList(bool brandom=false)
? ? ? ? {
? ? ? ? ? ? if (Days != 0)
? ? ? ? ? ? { MessageBox.Show("時(shí)間設(shè)置異常"); 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("完成");
? ? ? ? }
? ? }

顯示效果

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • DirectInfo.GetFiles返回?cái)?shù)組的默認(rèn)排序示例

    DirectInfo.GetFiles返回?cái)?shù)組的默認(rèn)排序示例

    這篇文章主要介紹了,DirectInfo.GetFiles返回?cái)?shù)組的默認(rèn)排序示例NTFS和CDFS下,是按照字母順序,而FAT下,按照文件創(chuàng)建時(shí)間順序
    2014-01-01
  • webBrowser代理設(shè)置c#代碼

    webBrowser代理設(shè)置c#代碼

    本文將介紹C# 為webBrowser設(shè)置代理實(shí)現(xiàn)代碼,需要了解的朋友可以參考下
    2012-11-11
  • C#字符串的截取函數(shù)用法總結(jié)

    C#字符串的截取函數(shù)用法總結(jié)

    這篇文章主要介紹了C#字符串的截取函數(shù)用法,實(shí)例總結(jié)了substring,Remove,indexOf等函數(shù)的用法,并對(duì)具體應(yīng)用進(jìn)行了實(shí)例分析,需要的朋友可以參考下
    2014-10-10
  • C#實(shí)現(xiàn)聊天窗體以及抖動(dòng)

    C#實(shí)現(xiàn)聊天窗體以及抖動(dòng)

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)聊天窗體以及抖動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • Unity實(shí)現(xiàn)汽車前后輪倒車軌跡計(jì)算

    Unity實(shí)現(xiàn)汽車前后輪倒車軌跡計(jì)算

    這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)汽車前后輪倒車軌跡計(jì)算,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • C#值類型和引用類型的深入理解

    C#值類型和引用類型的深入理解

    本篇文章主要是對(duì)C#中值類型和引用類型進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助
    2014-01-01
  • 關(guān)于finalize機(jī)制和引用、引用隊(duì)列的用法詳解

    關(guān)于finalize機(jī)制和引用、引用隊(duì)列的用法詳解

    下面小編就為大家?guī)硪黄P(guān)于finalize機(jī)制和引用、引用隊(duì)列的用法詳解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-09-09
  • C# Resources資源詳解

    C# Resources資源詳解

    這篇文章主要為大家詳細(xì)介紹了C# Resources資源,包括Resource Basics、Strongly Typed Resources等,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • C#實(shí)現(xiàn)文章添加內(nèi)鏈的方法

    C#實(shí)現(xiàn)文章添加內(nèi)鏈的方法

    文章添加內(nèi)鏈有利于提高讀者閱讀體驗(yàn),有利于搜索引擎優(yōu)化,提升頁面瀏覽量,下面小編通過兩種方法說下用c#實(shí)現(xiàn)文章添加內(nèi)鏈的方法,一起看看吧
    2018-08-08
  • 深入理解StringBuilder的使用方法

    深入理解StringBuilder的使用方法

    下面小編就為大家?guī)硪黄钊肜斫釹tringBuilder的使用方法。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-05-05

最新評(píng)論