Chart控件代碼篇


叕叕叕到周五了,時間總是走的如此之快,不免傷感(- -)。。。(傷感個毛線呀,再傷感16年就走了)12月就要結束了,趕緊來一篇充實一下生活。最近在項目中,做了個圖表程序,使用到了Chart,今天在這里做一個整理總結。

1.第一個Chart控件

1)先來熟悉一下chart,在前端做一個圖表可能會用到chart.js,在C#中可以用自帶的控件chart,感覺挺方便的。
2)創建一個項目,windows窗體應用程序。在工具箱的【數據】找到【 Chart】控件,並拖到窗體

image

3)右鍵chart【屬性】,在VS右側屬性【布局】下面找到【Dock】屬性設置為Fill,自己再調整一下大小

image

4)這里的操作是當加載窗體的時候顯示chart,所以有個窗體load事件。

image

5)雙擊后直接進入代碼,當在代碼中寫Series時會出現紅色波浪線,提示缺少相關命名空間之類的,點擊【Series】就可以看到所需要的,添加就ok了

image

6)代碼
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;

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

        private void Form1_Load(object sender, EventArgs e)
        {
            //清除默認的series
            chart1.Series.Clear();
            //new 一個叫做【Strength】的系列
            Series Strength = new Series("力量");  
            //設置chart的類型,這里為柱狀圖
            Strength.ChartType = SeriesChartType.Column;
            //給系列上的點進行賦值,分別對應橫坐標和縱坐標的值
            Strength.Points.AddXY("A", "90");
            Strength.Points.AddXY("B","88");
            Strength.Points.AddXY("C", "60");
            Strength.Points.AddXY("D", "93");
            Strength.Points.AddXY("E", "79");
            Strength.Points.AddXY("F", "85");
            //把series添加到chart上
            chart1.Series.Add(Strength);       

        }
    }
}
7)效果圖

image

2.兩個Series

1)右擊項目名,【添加】一個windows窗體。然后的話步驟和前面一樣,這里就不多說了
2)簡單粗暴上代碼

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

namespace MyChart
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}

    private void Form2_Load(object sender, EventArgs e)
    {

        chart1.Series.Clear();
        Series Strength = new Series("力量");
        Series Speed= new Series("速度");

        Strength.ChartType = SeriesChartType.Column;
        Strength.IsValueShownAsLabel = true;
        Strength.Color = System.Drawing.Color.Cyan;

        Speed.ChartType = SeriesChartType.Spline;
        Speed.IsValueShownAsLabel = true;

        chart1.ChartAreas[0].AxisX.MajorGrid.Interval =0.5;
        chart1.ChartAreas[0].AxisX.MajorGrid.Enabled =true;
        //chart1.ChartAreas[0].Area3DStyle.Enable3D = true;
        chart1.ChartAreas[0].AxisX.IsMarginVisible = true;
        chart1.ChartAreas[0].AxisX.Title = "英雄";
        chart1.ChartAreas[0].AxisX.TitleForeColor = System.Drawing.Color.Crimson;

        chart1.ChartAreas[0].AxisY.Title = "屬性";
        chart1.ChartAreas[0].AxisY.TitleForeColor = System.Drawing.Color.Crimson;
        chart1.ChartAreas[0].AxisY.TextOrientation = TextOrientation.Horizontal;



        Strength.LegendText = "力氣";
        Strength.Points.AddXY("A", "90");
        Strength.Points.AddXY("B", "88");
        Strength.Points.AddXY("C", "60");
        Strength.Points.AddXY("D", "93");
        Strength.Points.AddXY("E", "79");
        Strength.Points.AddXY("F", "85");

        Speed.Points.AddXY("A", "120");
        Speed.Points.AddXY("B", "133");
        Speed.Points.AddXY("C", "100");
        Speed.Points.AddXY("D", "98");
        Speed.Points.AddXY("E", "126");
        Speed.Points.AddXY("F", "89");

        //把series添加到chart上
        chart1.Series.Add(Speed); 
        chart1.Series.Add(Strength);
}
}

}

3)效果

image

4)熟悉常用屬性和方法
(1)Series對象

Series Strength = new Series("力量");
Series Speed= new Series("速度");

設置series類型

Strength.ChartType = SeriesChartType.Column;
Speed.ChartType = SeriesChartType.Spline;

是否把值當做標簽展示(默認false)

Speed.IsValueShownAsLabel = true;

設置series顏色

Strength.Color = System.Drawing.Color.Cyan;

給series上的點賦值
            Strength.Points.AddXY("A", "90");
            Strength.Points.AddXY("B", "88");
            Strength.Points.AddXY("C", "60");
(2)ChartArea(就是我們看到的區域)
以3D形式展示

chart1.ChartAreas[0].Area3DStyle.Enable3D = true;

設置坐標軸標題
   chart1.ChartAreas[0].AxisY.Title = "屬性";
            chart1.ChartAreas[0].AxisY.TitleForeColor = System.Drawing.Color.Crimson;
            chart1.ChartAreas[0].AxisY.TextOrientation = TextOrientation.Horizontal;
設置網格間隔(這里設成0.5,看得更直觀一點)
 chart1.ChartAreas[0].AxisX.MajorGrid.Interval =0.5;
 
 
 
         
  • 1

3.庫存波動

1)主代碼
using Daisy.Common.McsClient;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;

namespace BIZWhOnhandQuery
{
    public partial class MainForm : Mes.ControlsEx.ExtendForm.BaseForm
    {
        public string QuerySql01 = string.Empty;
        public MainForm()
        {
            InitializeComponent();
        }

        private void navigatorEx1_OnQuery(object sender, Mes.Core.ApplicationObject.SystemNavigatorClickedEventArgs e)
        {
            try
            {
                QueryForm qf = new QueryForm();
                qf.StartPosition = FormStartPosition.CenterScreen;
                qf.ShowDialog();
                if (qf.DialogResult == System.Windows.Forms.DialogResult.OK)
                {
                    QuerySql01 = qf.QuerySql01;
                            this.chart1.Series.Clear();//先將series清除
                            //設置X/Y樣式
                            chart1.ChartAreas[0].AxisY.Title = Mes.Core.Utility.StrUtil.Translate("數量");
                            chart1.ChartAreas[0].AxisX.Title = Mes.Core.Utility.StrUtil.Translate("日期");
                            chart1.ChartAreas[0].AxisX.LabelStyle.Angle = 0;
                            chart1.ChartAreas[0].AxisX.IntervalAutoMode = IntervalAutoMode.VariableCount;
                            chart1.ChartAreas[0].AxisY.IntervalAutoMode = IntervalAutoMode.VariableCount;
                            // chart1.ChartAreas[0].AxisX.Enabled = AxisEnabled.False;
                            // chart1.ChartAreas[0].AxisY.Enabled = AxisEnabled.False;
                            chart1.Titles[0].Text = "";

                            //設置char樣式

                            this.chart1.Series.Add(Mes.Core.Utility.StrUtil.Translate("數量"));
                            chart1.Series[Mes.Core.Utility.StrUtil.Translate("數量")].MarkerColor = Color.Black;//設置標志
                            chart1.Series[Mes.Core.Utility.StrUtil.Translate("數量")].MarkerSize = 1;
                            chart1.Series[Mes.Core.Utility.StrUtil.Translate("數量")].MarkerStyle = MarkerStyle.Square;
                            chart1.Series[Mes.Core.Utility.StrUtil.Translate("數量")].IsValueShownAsLabel = false;//是否顯示值
                            chart1.Series[Mes.Core.Utility.StrUtil.Translate("數量")].ChartType = SeriesChartType.Spline;//設置顯示樣式
                            chart1.Series[Mes.Core.Utility.StrUtil.Translate("數量")].BorderWidth = 1;
                            chart1.Series[Mes.Core.Utility.StrUtil.Translate("數量")].Color = Color.Blue;
                            chart1.Series[Mes.Core.Utility.StrUtil.Translate("數量")].ToolTip = Mes.Core.Utility.StrUtil.Translate("原材料數量");
                            chart1.Series[Mes.Core.Utility.StrUtil.Translate("數量")].YValueType = ChartValueType.Double;

                            McsDataReader reader = (McsDataReader)Mes.Core.Service.DatabaseAccessService.execute(qf.QuerySql01, Mes.Core.Service.ReturnType.RESULTSET);
                            if (reader.rowNumber > 0)
                            {
                                while (reader.Read())
                                {
                                    chart1.Series[Mes.Core.Utility.StrUtil.Translate("數量")].Points.AddXY(reader.getString(1), reader.getString(0));
                                }
                            }
                            chart1.ChartAreas[0].AxisY.Minimum = 0;
                            chart1.ChartAreas[0].Axes[1].LabelStyle.Format = "N0";
                            }
                         }
                      }
  catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                return;
            }   
        }
    }
 
 
 
         

2)效果圖

image

4.設備使用分析

查詢設備在某個時間范圍內的使用頻率(可按日或周或月),點擊一條記錄可以看到對應的曲線。該報表的設備包括有記錄已經維護基礎數據的設備,也包括有記錄還沒有維護基礎數據的設備
1)功能代碼結構

image

2)MainForm

image

using Daisy.Common.McsClient;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace BIZDeviceUseAnalysis
{
    public partial class MainForm : Mes.ControlsEx.ExtendForm.BaseForm
    {
        QueryForm form = null;
        public MainForm()
        {
            InitializeComponent();
        }

        private void navigatorEx1_OnQuery(object sender, Mes.Core.ApplicationObject.SystemNavigatorClickedEventArgs e)
        {
             form = new QueryForm();
             form.ShowDialog();
             if (form.DialogResult == System.Windows.Forms.DialogResult.OK)
            {
                GetData();

            }
        }
        void GetData()
        {
            try
            {
                AddColumns();           //獲取列名
                AddDataInGridView();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        void AddColumns()
        {
            try
            {
                List<string> columnList = new List<string>();
                McsDataReader reader = (McsDataReader)Mes.Core.Service.DatabaseAccessService.execute(form.colsql, Mes.Core.Service.ReturnType.RESULTSET);
                //McsDataReader reader01 = (McsDataReader)Mes.Core.Service.DatabaseAccessService.execute(form.QuerySql, Mes.Core.Service.ReturnType.RESULTSET);
                while (reader.Read())
                {
                    string calendar = reader.getString(0);

                    if (form.Kind == 1)
                    {
                        calendar = DateTime.Parse(calendar).ToString("yyyy-MM-dd");

                    }
                    //if (form.Kind == 2)
                    //{
                    //    calendar = DateTime.Parse(calendar).ToString("yyyy-iw");

                    //}
                    //if (form.Kind == 3)
                    //{
                    //    calendar = DateTime.Parse(calendar).ToString("yyyy-MM");

                    //}
                    columnList.Add(calendar);


                }


                if (columnList.Count == 0)
                    return;

                int count = this.dataGridViewEx1.Columns.Count;
                for (int j = count - 1; j > 2; j--)
                {
                    this.dataGridViewEx1.Columns.RemoveAt(j);
                }

                for (int i = 0; i < columnList.Count; i++)
                {
                    Mes.ControlsEx.DataGridViewTextBoxExColumn Column = new Mes.ControlsEx.DataGridViewTextBoxExColumn(this.components);
                    Column.DataType = Mes.Core.ApplicationObject.DataGridViewColumnDataType.NONE;
                    Column.DefaultCellStyle.Alignment = DataGridViewContentAlignment.NotSet;
                    Column.SortMode = DataGridViewColumnSortMode.Automatic;
                    Column.HeaderText = Mes.Core.Utility.StrUtil.ValueToString(columnList[i]);
                    //Column.HeaderText = DateTime.Parse(Mes.Core.Utility.StrUtil.ValueToString(columnList[i])).ToString("yyyy-MM-dd");
                    Column.ToolTipText = Mes.Core.Utility.StrUtil.ValueToString(columnList[i]);
                    Column.IgnoreValueChanged = false;
                    Column.IndexOrder = 0;
                    Column.IsShowTimePick = false;
                    Column.LovParameter = null;
                    Column.MustBeInput = false;
                    Column.MustBeInputErrorMsg = "";
                    Column.Name = "Col" + Mes.Core.Utility.StrUtil.ValueToString(columnList[i]);
                    Column.Tag = columnList[i];
                    Column.PopType = Mes.Core.ApplicationObject.DataGridViewColumnPopType.NONE;
                    Column.RangeEndValue = "";
                    Column.RangeStartValue = "";
                    Column.ReadOnly = true;
                    Column.RegString = "";
                    Column.ValidationErrorMsg = "";
                    Column.ValidationType = Mes.Core.ApplicationObject.DataGridViewColumnValidationType.NONE;
                    Column.Width = 150;
                    Column.Resizable = DataGridViewTriState.False;
                    Column.SortMode = DataGridViewColumnSortMode.NotSortable;
                    this.dataGridViewEx1.Columns.Add(Column);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        void AddDataInGridView()
        {
            try
            {
                this.dataGridViewEx1.Rows.Clear();

                GetDataBySQL(form.QuerySql, 1);


                this.statusStripBarEx1.ShowMessage(Mes.Core.Utility.StrUtil.Translate("共查詢到" + dataGridViewEx1.RowCount + "條數據"));
                //FillChart();//填充圖表
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        void GetDataBySQL(string sql, int type)
        {
            try
            {
                int rowIndex = -1;

                McsDataReader reader = (McsDataReader)Mes.Core.Service.DatabaseAccessService.execute(sql, Mes.Core.Service.ReturnType.RESULTSET);

                while (reader.Read())
                {
                    string calendar = reader.getString(2);

                    if (form.Kind == 1)
                    {
                        // calendar = DateTime.Parse(calendar).ToShortDateString();
                        calendar = DateTime.Parse(calendar).ToString("yyyy-MM-dd");
                    }
                    string mac= reader.getString(0);
                    string deviceCode = reader.getString(3);
                    string deviceName = reader.getString(4);

                    string value=reader.getString(1);


                    bool IsExist = false;

                        for (int i = 0; i < this.dataGridViewEx1.Rows.Count; i++)
                        {
                            string rowValue = Mes.Core.Utility.StrUtil.ValueToString(this.dataGridViewEx1.Rows[i].Cells[0].Value);


                            if (rowValue == mac)
                            {
                                rowIndex = i;
                                IsExist = true;
                                break;
                            }
                        }
                        if (IsExist)
                        {

                            FindCellForValue(rowIndex, value, calendar,deviceCode,deviceName);

                        }
                        else
                        {

                            string text = string.Empty;
                            if (type == 1)
                                text = mac;
                           // MessageBox.Show("mac:" + mac);
                            rowIndex = this.dataGridViewEx1.Rows.Add(text);
                            this.dataGridViewEx1.Rows[rowIndex].Cells[1].Value = deviceCode;
                            this.dataGridViewEx1.Rows[rowIndex].Cells[2].Value = deviceName;
                            FindCellForValue(rowIndex, value, calendar, deviceCode, deviceName);


                        }

                }


            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        void FindCellForValue(int rowIndex, string Value, string ScanItem,string deviceCode,string deviceName)
        {
            for (int i = 3; i < this.dataGridViewEx1.Columns.Count; i++)
            {
                if (ScanItem == this.dataGridViewEx1.Columns[i].HeaderText)
                {
                       this.dataGridViewEx1.Rows[rowIndex].Cells[i].Value =Value;




                }
            }

        }
        void FillChart(int rowIndex)
        {
            int FixColumnIndex = 1;


            try
            {

                chart1.Series.Clear();

                //chart1.ChartAreas[0].Axes[1].Maximum = 1.3;
                chart1.ChartAreas[0].Axes[1].Minimum = 0;

                //設置網格線   
                chart1.ChartAreas[0].AxisX.MajorGrid.LineColor = Color.Black;
                chart1.ChartAreas[0].AxisX.MajorGrid.Interval = 0;//網格間隔
                chart1.ChartAreas[0].AxisX.MinorGrid.Interval = 0;
                chart1.ChartAreas[0].AxisY.MajorGrid.LineColor = Color.Black;
                chart1.ChartAreas[0].AxisY.MajorGrid.Interval = 0;
                chart1.ChartAreas[0].AxisY.MinorGrid.Interval = 0;
                chart1.ChartAreas[0].AxisY.Title = Mes.Core.Utility.StrUtil.Translate("使用次數");
                chart1.ChartAreas[0].AxisX.Title = Mes.Core.Utility.StrUtil.Translate("使用日期");
                //折線圖
                //for (int i = 0; i < this.datagridviewex1.rowcount; i++)
                //{
                    int[] yValues1 = new int[this.dataGridViewEx1.Columns.Count - FixColumnIndex];
                    string[] xValues1 = new string[this.dataGridViewEx1.Columns.Count - FixColumnIndex];

                    //int[]yValues1=new int[0];
                    //string[] xValues1=new string[0] ;
                    chart1.Series.Add(Mes.Core.Utility.StrUtil.ValueToString(this.dataGridViewEx1.Rows[rowIndex].Cells[0].Value));
                    //設置圖片類型
                    chart1.Series[0].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Spline;
                    //設置默認軸
                    chart1.Series[0].IsVisibleInLegend = true;
                    //設置圖例顯示
                    chart1.Series[0].IsValueShownAsLabel = true;
                    //設置軸顯示
                    //chart1.Series[i].Label = "#VAL{P}";
                    //設置線條粗細
                    chart1.Series[0].BorderWidth = 3;

                    int count = 0;

                    for (int j = 3; j < this.dataGridViewEx1.ColumnCount; j++)
                    {
                        int  _value = 0;
                        string value = Mes.Core.Utility.StrUtil.ValueToString(this.dataGridViewEx1.Rows[rowIndex].Cells[j].Value);
                        string text = Mes.Core.Utility.StrUtil.ValueToString(this.dataGridViewEx1.Columns[j].HeaderText);

                        xValues1[count] = text;

                        //柱狀圖數據添加 
                        if (value!= string.Empty)
                        {
                            _value =Convert.ToInt32(value);
                            yValues1[count] = _value;
                        }
                        else
                        {
                            _value = 0;
                            yValues1[count] = _value;
                        }
                        chart1.Series[0].Points.DataBindXY(xValues1,yValues1);
                        count += 1;
                   // }
                }

            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        private void navigatorEx1_Load(object sender, EventArgs e)
        {
            this.navigatorEx1.AddButton(Mes.Core.Utility.StrUtil.Translate("設備基礎資料維護"), MAINTAIN_DEVICE);
        }

        //設備基礎資料維護窗口
        private void MAINTAIN_DEVICE(object sender, EventArgs e)
        {
            BaseInfoForm bi = new BaseInfoForm();
            bi.ShowDialog();

        }

        private void dataGridViewEx1_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            int currentIndex = e.RowIndex;

            if (e.RowIndex < 0)
                return;
            if (this.dataGridViewEx1.Rows.Count > 0 && e.RowIndex < this.dataGridViewEx1.Rows.Count) {

                FillChart(currentIndex);

            }
        }

    }
}
3)QueryForm

image

using Mes.ControlsEx;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace BIZDeviceUseAnalysis
{
    public partial class QueryForm : Mes.ControlsEx.ExtendForm.QueryForm
    {
        public int Kind = 0;
        public string colsql = string.Empty;

        public QueryForm()
        {
            InitializeComponent();
        }

        private void QueryForm_Load(object sender, EventArgs e)
        {


        }

        private void cbByDay_CheckedChanged(object sender, EventArgs e)
        {
            CheckChangeEvent(sender);
        }


        private void cbByWeek_CheckedChanged(object sender, EventArgs e)
        {
            CheckChangeEvent(sender);
        }

        private void cbByMonth_CheckedChanged(object sender, EventArgs e)
        {
            CheckChangeEvent(sender);
        }

        private void CheckChangeEvent(object sender)
        {
            try
            {
                if ((sender as CheckBoxEx).Checked == true)
                {
                    foreach (CheckBoxEx chk in (sender as CheckBoxEx).Parent.Controls)
                    {
                        if (chk != sender)
                        {
                            chk.Checked = false;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void QueryForm_OnQuery(object sender, EventArgs e)
        {
            string startTimeStr = string.Empty;
            string endTimeStr = string.Empty;
            string condition = string.Empty;
            string mac = string.Empty;

            //Mac
            string txtMac = this.tbMac.Text.Trim();
            List<string> macList = this.tbMac.MultirowValue;
            if (macList != null & macList.Count > 0)
            {
                mac = " AND mac in (" + Mes.Core.Utility.StrUtil.BuildPara(macList) + ") ";
            }
            else
            {
                if (txtMac != string.Empty)
                {
                    mac = " AND mac " + Mes.Core.Utility.StrUtil.ProcInput(txtMac, false);
                }
            }

            //查詢日期從
            string txtDailyWorkFrom = this.tbDateFrom.Text.Trim();
            if (txtDailyWorkFrom == string.Empty)
            {
                MessageBox.Show(Mes.Core.Utility.StrUtil.Translate("查詢日期從不能為空"));
                return;
            }
            else
            {
                startTimeStr = txtDailyWorkFrom;
            }
            //查詢日期到
            string txtDailyWorkTo = this.tbDateTo.Text.Trim();
            if (txtDailyWorkTo == string.Empty)
            {
                MessageBox.Show(Mes.Core.Utility.StrUtil.Translate("查詢日期到不能為空"));
                return;
            }
            else
            {
                endTimeStr = txtDailyWorkTo;
            }
              TimeSpan ts;
            try
            {
                DateTime startTime = DateTime.ParseExact(txtDailyWorkFrom, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture);
                DateTime endTime = DateTime.ParseExact(txtDailyWorkTo, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture);
                ts = endTime - startTime;
            }
            catch
            {
                MessageBox.Show(Mes.Core.Utility.StrUtil.Translate("時間格式不正確"));
                return;
            }

            //日報
            if (this.cbByDay.Checked)
            {
                if (ts.TotalDays > 30)
                {
                    MessageBox.Show(Mes.Core.Utility.StrUtil.Translate("查詢日期從到查詢日期到不能超過一個月"));
                    return;
                }

                Kind = 1;
                condition += "GROUP BY mac, to_char(bmr.creation_date, 'yyyy-mm-dd'), device_code,device_name";
                condition += " ORDER BY mac, to_char(bmr.creation_date, 'yyyy-mm-dd') ,device_code,device_name ";
                this.QuerySql = Sql.Core.GetMainSqlByDay(startTimeStr, endTimeStr,mac,condition);
                colsql = Sql.Core.GetColumnByDay(startTimeStr, endTimeStr);

            }

            //周報
            if (this.cbByWeek.Checked)
            {
                if (ts.TotalDays > 13 * 7)
                {
                    MessageBox.Show(Mes.Core.Utility.StrUtil.Translate("查詢日期從到查詢日期到不能超過13周"));
                    return;
                }

                Kind = 2;
                condition += "GROUP BY mac,  to_char(trunc(bmr.creation_date),'yyyy-iw'), device_code,device_name";
                condition += " ORDER BY mac,  to_char(trunc(bmr.creation_date),'yyyy-iw') ,device_code,device_name ";
                this.QuerySql = Sql.Core.GetMainSqlByWeek(startTimeStr, endTimeStr,mac, condition);
                colsql = Sql.Core.GetColumnByWeek(startTimeStr, endTimeStr);

            }

            //月報
            if (this.cbByMonth.Checked)
            {
                if (ts.TotalDays > 365 * 2)
                {
                    MessageBox.Show(Mes.Core.Utility.StrUtil.Translate("查詢日期從到查詢日期到不能超過2年"));
                    return;
                }

                Kind = 3;
                condition += "GROUP BY mac,  to_char(trunc(bmr.creation_date),'yyyy-mm'), device_code,device_name";
                condition += " ORDER BY mac,  to_char(trunc(bmr.creation_date),'yyyy-mm') ,device_code,device_name ";
                this.QuerySql = Sql.Core.GetMainSqlByMonth(startTimeStr, endTimeStr, mac,condition);
                colsql = Sql.Core.GetColumnByMonth(startTimeStr, endTimeStr);

            }
            this.DialogResult = System.Windows.Forms.DialogResult.OK;
            this.Close();

        }

        private void QueryForm_OnCancelQuery(object sender, EventArgs e)
        {
            this.tbMac.Text = this.tbDateFrom.Text = this.tbDateTo.Text = string.Empty;
        }
    }
}

 
 
 
         

5)BaseInfoForm

image

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace BIZDeviceUseAnalysis
{
    public partial class BaseInfoForm : Mes.ControlsEx.ExtendForm.BaseForm
    {
        public BaseInfoForm()
        {
            InitializeComponent();
        }

        private void navigatorEx1_OnQuery(object sender, Mes.Core.ApplicationObject.SystemNavigatorClickedEventArgs e)
        {
            BaseInfoQueryForm bio = new BaseInfoQueryForm();
            bio.StartPosition = FormStartPosition.CenterScreen;
            bio.ShowDialog();
            if (bio.DialogResult == System.Windows.Forms.DialogResult.OK) {
                this.navigatorEx1.QuerySql = bio.QuerySql;

            }
        }

        private void navigatorEx1_OnSave(object sender, Mes.Core.ApplicationObject.SystemNavigatorClickedEventArgs e)
        {
            if (this.dataGridViewEx1.AddedRows.Count > 0)//新增行大於0
            {
                this.navigatorEx1.InsertSqlList = this.SaveOrUpdate(this.dataGridViewEx1.AddedRows, true);//返回值為True

            }
            if (this.dataGridViewEx1.ChangedRows.Count > 0)//修改行大於0
            {
                this.navigatorEx1.UpdateSqlList = this.SaveOrUpdate(this.dataGridViewEx1.ChangedRows, false);//返回值為False
            }
        }
        private List<string> SaveOrUpdate(List<string> list, bool flag)
        {
            List<string> InsertOrUpdatelist = new List<string>();
            for (int i = 0; i < list.Count; i++)
            {
                int row_index = Convert.ToInt32(list[i]);
                List<string> lis = new List<string>();
                if (flag)//如果返回值為True
                {
                    lis.Add(Mes.Core.Utility.StrUtil.ValueToString(dataGridViewEx1.Rows[row_index].Cells[this.ColDeviceCode.Name].Value));
                    lis.Add(Mes.Core.Utility.StrUtil.ValueToString(dataGridViewEx1.Rows[row_index].Cells[this.ColDeviceType.Name].Value));
                    lis.Add(Mes.Core.Utility.StrUtil.ValueToString(dataGridViewEx1.Rows[row_index].Cells[this.ColDeviceName.Name].Value));
                    lis.Add(Mes.Core.Utility.StrUtil.ValueToString(dataGridViewEx1.Rows[row_index].Cells[this.ColMacAddress.Name].Value));
                    lis.Add(Mes.Core.Utility.StrUtil.ValueToString(dataGridViewEx1.Rows[row_index].Cells[this.ColFloor.Name].Value));
                    lis.Add(Mes.Core.Utility.StrUtil.ValueToString(dataGridViewEx1.Rows[row_index].Cells[this.ColAdminDepartment.Name].Value));
                    lis.Add(Mes.Core.Utility.StrUtil.ValueToString(dataGridViewEx1.Rows[row_index].Cells[this.ColEnable.Name].Value));
                    lis.Add(Mes.Core.Utility.StrUtil.ValueToString(dataGridViewEx1.Rows[row_index].Cells[this.ColDescription.Name].Value));

                    string template = Mes.Core.Utility.StrUtil.BuildPara(lis);


                    string sql = "{? = call biz_device_pck.insert_rows_for_ui(" + template + ")}";
                    InsertOrUpdatelist.Add(sql);
                }
                else
                {
                   // lis.Add(Mes.Core.Utility.StrUtil.ValueToString(dataGridViewEx1.Rows[row_index].Cells[0].Value));
                    lis.Add(Mes.Core.Utility.StrUtil.ValueToString(dataGridViewEx1.Rows[row_index].Cells[this.ColDeviceID.Name].Value));
                    lis.Add(Mes.Core.Utility.StrUtil.ValueToString(dataGridViewEx1.Rows[row_index].Cells[this.ColDeviceCode.Name].Value));
                    lis.Add(Mes.Core.Utility.StrUtil.ValueToString(dataGridViewEx1.Rows[row_index].Cells[this.ColDeviceType.Name].Value));
                    lis.Add(Mes.Core.Utility.StrUtil.ValueToString(dataGridViewEx1.Rows[row_index].Cells[this.ColDeviceName.Name].Value));
                    lis.Add(Mes.Core.Utility.StrUtil.ValueToString(dataGridViewEx1.Rows[row_index].Cells[this.ColMacAddress.Name].Value));
                    lis.Add(Mes.Core.Utility.StrUtil.ValueToString(dataGridViewEx1.Rows[row_index].Cells[this.ColFloor.Name].Value));
                    lis.Add(Mes.Core.Utility.StrUtil.ValueToString(dataGridViewEx1.Rows[row_index].Cells[this.ColAdminDepartment.Name].Value));
                    lis.Add(Mes.Core.Utility.StrUtil.ValueToString(dataGridViewEx1.Rows[row_index].Cells[this.ColEnable.Name].Value));
                    lis.Add(Mes.Core.Utility.StrUtil.ValueToString(dataGridViewEx1.Rows[row_index].Cells[this.ColDescription.Name].Value));
                    string template = Mes.Core.Utility.StrUtil.BuildPara(lis);

                    string sql = "{? = call biz_device_pck.update_rows_for_ui(" + template + ")}";
                    InsertOrUpdatelist.Add(sql);
                }
            }
            return InsertOrUpdatelist;
        }
        }
    }
}

 
 
 
         

6)BaseInfoQueryForm

image

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace BIZDeviceUseAnalysis
{
    public partial class BaseInfoQueryForm : Mes.ControlsEx.ExtendForm.QueryForm
    {
        public BaseInfoQueryForm()
        {
            InitializeComponent();
        }

        private void BaseInfoQueryForm_OnQuery(object sender, EventArgs e)
        {
            this.QuerySql = Sql.Core.GetDeviceInfo();

            // 設備編碼
            string txtDeviceCode = this.tbDeviceCode.Text.Trim();
            List<string> deviceCodeList = this.tbDeviceCode.MultirowValue;
            if (deviceCodeList != null & deviceCodeList.Count > 0)
            {
                this.QuerySql += " AND device_code in (" + Mes.Core.Utility.StrUtil.BuildPara(deviceCodeList) + ") ";
            }
            else
            {
                if (txtDeviceCode != string.Empty)
                {
                    this.QuerySql += " AND device_code " + Mes.Core.Utility.StrUtil.ProcInput(txtDeviceCode, false);
                }
            }
            //設備名稱
            string txtDeviceName = this.tbDeviceName.Text.Trim();
            List<string> deviceNameList = this.tbDeviceName.MultirowValue;
            if (deviceNameList != null & deviceNameList.Count > 0)
            {
                this.QuerySql += " AND device_name in (" + Mes.Core.Utility.StrUtil.BuildPara(deviceNameList) + ") ";
            }
            else
            {
                if (txtDeviceName != string.Empty)
                {
                    this.QuerySql += " AND device_name " + Mes.Core.Utility.StrUtil.ProcInput(txtDeviceName, false);
                }
            }
            //mac地址
            string txtMac = this.tbMacAddress.Text.Trim();
            List<string> macList = this.tbMacAddress.MultirowValue;
            if (macList != null & macList.Count > 0)
            {
                this.QuerySql += " AND mac_address in (" + Mes.Core.Utility.StrUtil.BuildPara(macList) + ") ";
            }
            else
            {
                if (txtMac != string.Empty)
                {
                    this.QuerySql += " AND mac_address " + Mes.Core.Utility.StrUtil.ProcInput(txtMac, false);
                }
            }
            //部門
            string txtDepartment = this.tbDepartment.Text.Trim();
            List<string> departmentList = this.tbDepartment.MultirowValue;
            if (departmentList != null & departmentList.Count > 0)
            {
                this.QuerySql += " AND admin_department in (" + Mes.Core.Utility.StrUtil.BuildPara(departmentList) + ") ";
            }
            else
            {
                if (txtDepartment != string.Empty)
                {
                    this.QuerySql += " AND admin_department " + Mes.Core.Utility.StrUtil.ProcInput(txtDepartment, false);
                }
            }

            this.QuerySql += "  order by device_code,device_name";
            this.DialogResult = System.Windows.Forms.DialogResult.OK;
            this.Close();
        }

        private void BaseInfoQueryForm_OnCancelQuery(object sender, EventArgs e)
        {
            this.tbDeviceCode.Text = this.tbDeviceName.Text =
            this.tbMacAddress.Text = this.tbDepartment.Text = string.Empty;
        }
    }
}

 
 
 
         

7)SQL
using Mes.ControlsEx;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace BIZDeviceUseAnalysis.Sql
{
    class Core
    {
        //按天
        public static string GetMainSqlByDay(string startTime, string endTime,string mac,string condition)
        {

            string sql = @"
                        WITH baseInfoRecord AS(SELECT mac, SUM(counting) total, to_char(bmr.creation_date, 'yyyy-mm-dd'),        device_code,device_name
                          FROM biz_mac_record bmr, (SELECT 1 AS counting FROM dual),biz_device_info bdi
                         WHERE bmr.creation_date >= to_date('" + startTime + @"', 'yyyy-mm-dd')
                           AND bmr.creation_date <= to_date('" + endTime + @"', 'yyyy-mm-dd')
                           AND bmr.mac=bdi.mac_address 
                            "+mac+@"
                            "+condition+@"
                            )
                      ,
                        noBaseInfo AS(SELECT DISTINCT mac, SUM(counting) total, to_char(bmr.creation_date, 'yyyy-mm-dd'),''device_code,''device_name
                          FROM biz_mac_record bmr, (SELECT 1 AS counting FROM dual),biz_device_info bdi
                         WHERE bmr.creation_date >= to_date('" + startTime + @"', 'yyyy-mm-dd')
                           AND bmr.creation_date <= to_date('" + endTime + @"', 'yyyy-mm-dd')
                           AND bmr.mac NOT IN (SELECT mac_address FROM biz_device_info)
                           " + mac + @"
                           " + condition + @" )

                        SELECT * FROM baseInfoRecord
                        UNION ALL 
                        SELECT * FROM noBaseInfo";
            return sql;

        }

        public static string GetColumnByDay(string startTime, string endTime)
        {
            string sql = @"SELECT DISTINCT to_char(bmr.creation_date,'yyyy-mm-dd')
                                 FROM biz_mac_record bmr
                                 WHERE bmr.creation_date >= to_date('" + startTime+ @"', 'yyyy-mm-dd')
                                      AND bmr.creation_date <= to_date('" + endTime + @"', 'yyyy-mm-dd')
                                      ORDER BY to_char(bmr.creation_date,'yyyy-mm-dd')";
            return sql;

        }
        //按周
        public static string GetMainSqlByWeek(string startTime, string endTime, string mac, string condition)
        {

            string sql = @"
                        WITH baseInfoRecord AS(SELECT mac, SUM(counting) total, to_char(trunc(bmr.creation_date),'yyyy-iw'),        device_code,device_name
                          FROM biz_mac_record bmr, (SELECT 1 AS counting FROM dual),biz_device_info bdi
                         WHERE bmr.creation_date >= to_date('" + startTime + @"', 'yyyy-mm-dd')
                           AND bmr.creation_date <= to_date('" + endTime + @"', 'yyyy-mm-dd')
                           AND bmr.mac=bdi.mac_address 
                             " + mac + @"
                            " + condition + @"
                            )
                      ,
                        noBaseInfo AS(SELECT DISTINCT mac, SUM(counting) total, to_char(trunc(bmr.creation_date),'yyyy-iw'),''device_code,''device_name
                          FROM biz_mac_record bmr, (SELECT 1 AS counting FROM dual),biz_device_info bdi
                         WHERE bmr.creation_date >= to_date('" + startTime + @"', 'yyyy-mm-dd')
                           AND bmr.creation_date <= to_date('" + endTime + @"', 'yyyy-mm-dd')
                           AND bmr.mac NOT IN (SELECT mac_address FROM biz_device_info)
                           " + mac + @"
                           " + condition + @" )

                        SELECT * FROM baseInfoRecord
                        UNION ALL 
                        SELECT * FROM noBaseInfo";
            return sql;

        }
        public static string GetColumnByWeek(string startTime, string endTime)
        {
            string sql = @"SELECT DISTINCT to_char(bmr.creation_date,'yyyy-iw')
                                 FROM biz_mac_record bmr
                                 WHERE bmr.creation_date >= to_date('" + startTime + @"', 'yyyy-mm-dd')
                                      AND bmr.creation_date <= to_date('" + endTime + @"', 'yyyy-mm-dd')
                                      ORDER BY to_char(bmr.creation_date,'yyyy-iw')";
            return sql;

        }
        //按月
        public static string GetMainSqlByMonth(string startTime, string endTime, string mac, string condition)
        {
            string sql = @"
                        WITH baseInfoRecord AS(SELECT mac, SUM(counting) total, to_char(trunc(bmr.creation_date),'yyyy-mm'),        device_code,device_name
                          FROM biz_mac_record bmr, (SELECT 1 AS counting FROM dual),biz_device_info bdi
                         WHERE bmr.creation_date >= to_date('" + startTime + @"', 'yyyy-mm-dd')
                           AND bmr.creation_date <= to_date('" + endTime + @"', 'yyyy-mm-dd')
                           AND bmr.mac=bdi.mac_address 
                            " + mac + @"
                            " + condition + @"
                            )
                      ,
                        noBaseInfo AS(SELECT DISTINCT mac, SUM(counting) total, to_char(trunc(bmr.creation_date),'yyyy-mm'),''device_code,''device_name
                          FROM biz_mac_record bmr, (SELECT 1 AS counting FROM dual),biz_device_info bdi
                         WHERE bmr.creation_date >= to_date('" + startTime + @"', 'yyyy-mm-dd')
                           AND bmr.creation_date <= to_date('" + endTime + @"', 'yyyy-mm-dd')
                           AND bmr.mac NOT IN (SELECT mac_address FROM biz_device_info)
                           " + mac + @"
                           " + condition + @" )

                        SELECT * FROM baseInfoRecord
                        UNION ALL 
                        SELECT * FROM noBaseInfo";

            return sql;

        }
        public static string GetColumnByMonth(string startTime, string endTime)
        {
            string sql = @"SELECT DISTINCT to_char(bmr.creation_date,'yyyy-mm')
                                 FROM biz_mac_record bmr
                                 WHERE bmr.creation_date >= to_date('" + startTime + @"', 'yyyy-mm-dd')
                                      AND bmr.creation_date <= to_date('" + endTime + @"', 'yyyy-mm-dd')
                                      ORDER BY to_char(bmr.creation_date,'yyyy-mm')";
            return sql;
        }
        //設備基礎信息
        public static string GetDeviceInfo() 
        {
            string sql = @"select * from biz_device_info where 1=1";
            return sql;
        }
    }
}

 
 
 
         

8)運行效果
按日

image

按周

image

--------------------- 本文來自 假裝不感冒 的CSDN 博客 ,全文地址請點擊:https://blog.csdn.net/Kang_xiong/article/details/53944487?utm_source=copy


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM