コード例 #1
0
        private void timer1_Tick(object sender, EventArgs e)
        {
            DateTime argument = DateTime.Now;
            DateTime minDate  = argument.AddSeconds(-TimeInterval);

            UpdateSeries(0, argument, minDate, gen0series);
            UpdateSeries(1, argument, minDate, gen1series);
            UpdateSeries(2, argument, minDate, gen2series);
            UpdateSeries(3, argument, minDate, gen3series);

            SwiftPlotDiagram diagram = chartControl.Diagram as SwiftPlotDiagram;

            diagram.AxisX.ConstantLines.AddRange(gcseries.ToArray());
            gcseries.Clear();

            if (AxisXRange != null)
            {
                try
                {
                    AxisXRange.SetMinMaxValues(minDate, argument);
                }
                catch
                {
                    // Oh yeah! Let's kill this...
                }
            }
        }
コード例 #2
0
        /// <summary>
        ///     加载曲线背景颜色
        /// </summary>
        /// <param name="Diagram">曲线背景</param>
        /// <param name="ColorKey">颜色key值</param>
        public void SetBigDataChartBgColor(SwiftPlotDiagram Diagram, string ColorKey)
        {
            //DataTable ChartSets = ServiceFactory.CreateService<IChartService>().getAllChartSet("");
            var req = new GetAllChartSetRequest
            {
                StrKey = ""
            };
            var res = _chartService.GetAllChartSet(req);

            if (!res.IsSuccess)
            {
                throw new Exception(res.Message);
            }
            var ChartSets = res.Data;

            for (var i = 0; i < ChartSets.Rows.Count; i++)
            {
                if (ChartSets.Rows[i]["strKey"].ToString() == ColorKey)
                {
                    Diagram.DefaultPane.BackColor = Color.FromArgb(int.Parse(ChartSets.Rows[i]["strValue"].ToString()));
                    for (var j = 0; j < Diagram.Panes.Count; j++)
                    {
                        Diagram.Panes[j].BackColor = Color.FromArgb(int.Parse(ChartSets.Rows[i]["strValue"].ToString()));
                    }
                }
            }
        }
コード例 #3
0
ファイル: MainForm.cs プロジェクト: damoOnly/SD
        // 初始化曲线
        private void InitSeries()
        {
            chartControl_Main.Legend.AlignmentHorizontal = LegendAlignmentHorizontal.Right;

            chartControl_Main.Series.Clear();
            Equipment ep = new Equipment();

            if (mainList.Count > 0)
            {
                ep = mainList.First();
            }
            seriesOne     = new Series(string.Format(ep.EName), ViewType.SwiftPlot);
            seriesOne.Tag = ep.ID;
            seriesOne.ArgumentScaleType = ScaleType.DateTime;
            SwiftPlotSeriesView spsv1 = new SwiftPlotSeriesView();

            spsv1.LineStyle.Thickness = 2;
            seriesOne.View            = spsv1;
            chartControl_Main.Series.Add(seriesOne);

            SwiftPlotDiagram diagram_Tem = chartControl_Main.Diagram as SwiftPlotDiagram;

            diagram_Tem.Margins.Right = 15;
            //diagram_Tem.AxisX.
            diagram_Tem.AxisX.DateTimeGridAlignment        = DateTimeMeasurementUnit.Minute;
            diagram_Tem.AxisX.DateTimeMeasureUnit          = DateTimeMeasurementUnit.Second;
            diagram_Tem.AxisX.DateTimeOptions.Format       = DateTimeFormat.Custom;
            diagram_Tem.AxisX.DateTimeOptions.FormatString = "HH:mm:ss";
            //diagram_Tem.AxisX.GridLines.Visible = true;
            diagram_Tem.AxisX.Range.SideMarginsEnabled = false;
            diagram_Tem.AxisX.Range.ScrollingRange.SideMarginsEnabled = true;
            diagram_Tem.AxisX.Title.Text         = "时间";
            diagram_Tem.AxisX.Title.Visible      = true;
            diagram_Tem.AxisX.Title.Alignment    = StringAlignment.Far;
            diagram_Tem.AxisX.Title.Antialiasing = false;
            diagram_Tem.AxisX.Title.Font         = new System.Drawing.Font("Tahoma", 8);

            diagram_Tem.AxisY.Range.AlwaysShowZeroLevel = false;
            //diagram_Tem.EnableAxisYZooming = true;
            //diagram_Tem.EnableAxisYScrolling = true;
            diagram_Tem.AxisY.Interlaced = true;
            diagram_Tem.AxisY.Range.SideMarginsEnabled = true;
            diagram_Tem.AxisY.Range.ScrollingRange.SideMarginsEnabled = true;
            diagram_Tem.AxisY.Title.Text         = string.Format("浓度({0})", ep.Unit);
            diagram_Tem.AxisY.Title.Visible      = true;
            diagram_Tem.AxisY.Title.Alignment    = StringAlignment.Far;
            diagram_Tem.AxisY.Title.Antialiasing = false;
            diagram_Tem.AxisY.Title.Font         = new System.Drawing.Font("Tahoma", 8);
            //if (diagram_Tem != null && diagram_Tem.AxisX.DateTimeMeasureUnit == DateTimeMeasurementUnit.Millisecond)
            //    diagram_Tem.AxisX.Range.SetMinMaxValues(minDate, argument);
        }
コード例 #4
0
ファイル: MainForm.cs プロジェクト: damoOnly/SD
        private void btn_SearchHistory_Click(object sender, EventArgs e)
        {
            gridControl_History.DataSource = null;
            chartControl_History.Series[0].Points.Clear();


            if (comboBoxEdit_ID.Text.Trim() == string.Empty)
            {
                XtraMessageBox.Show("请选择设备名称");
                return;
            }
            TimeSpan ts  = dateEdit_End.DateTime - dateEdit_Start.DateTime;
            TimeSpan ts1 = new TimeSpan(0, 0, 0, 1);

            if (ts < ts1)
            {
                XtraMessageBox.Show("截止时间必须大于起始时间");
                return;
            }
            Equipment eq = mainList.Find(c => c.Address == Convert.ToInt64(comboBoxEdit_ID.Text));

            List <EquipmentData> data = EquipmentDataDal.GetListByTime(eq.ID, dateEdit_Start.DateTime, dateEdit_End.DateTime);

            if (data == null || data.Count < 1)
            {
                LogLib.Log.GetLogger(this).Warn("数据库中没有记录");
                return;
            }
            gridControl_History.DataSource = data;
            gridView_History.BestFitColumns();
            data.ForEach(c =>
            {
                chartControl_History.Series[0].Points.Add(new SeriesPoint(c.AddTime, c.Chroma));
            });

            float max = data.Max(c => c.Chroma);
            float min = data.Min(c => c.Chroma);

            // 更改曲线纵坐标描述
            SwiftPlotDiagram diagram_Tem = chartControl_History.Diagram as SwiftPlotDiagram;

            diagram_Tem.AxisY.Title.Text = eq.EName + ":" + eq.Unit;
            if (eq.Range > 0)
            {
                diagram_Tem.AxisY.Range.SetMinMaxValues(0, eq.Range);
            }

            setX(data);
        }
コード例 #5
0
        void timer_Tick(object sender, EventArgs e)
        {
            if (Series1 == null || Series2 == null)
            {
                return;
            }
            DateTime argument = DateTime.Now;

            SeriesPoint[] pointsToUpdate1 = new SeriesPoint[interval];
            SeriesPoint[] pointsToUpdate2 = new SeriesPoint[interval];
            for (int i = 0; i < interval; i++)
            {
                pointsToUpdate1[i] = new SeriesPoint(argument, value1);
                pointsToUpdate2[i] = new SeriesPoint(argument, value2);
                argument           = argument.AddMilliseconds(1);
                UpdateValues();
            }
            DateTime minDate             = argument.AddSeconds(-TimeInterval);
            int      pointsToRemoveCount = 0;

            foreach (SeriesPoint point in Series1.Points)
            {
                if (point.DateTimeArgument < minDate)
                {
                    pointsToRemoveCount++;
                }
            }
            if (pointsToRemoveCount < Series1.Points.Count)
            {
                pointsToRemoveCount--;
            }
            AddPoints(Series1, pointsToUpdate1);
            AddPoints(Series2, pointsToUpdate2);
            if (pointsToRemoveCount > 0)
            {
                Series1.Points.RemoveRange(0, pointsToRemoveCount);
                Series2.Points.RemoveRange(0, pointsToRemoveCount);
            }
            SwiftPlotDiagram diagram = chart.Diagram as SwiftPlotDiagram;

            if (diagram != null && (diagram.AxisX.DateTimeScaleOptions.MeasureUnit == DateTimeMeasureUnit.Millisecond || diagram.AxisX.DateTimeScaleOptions.ScaleMode == ScaleMode.Continuous))
            {
                diagram.AxisX.WholeRange.SetMinMaxValues(minDate, argument);
            }
        }
コード例 #6
0
        private void setupChartInfoEventHandler(object sender, EventArgs e)
        {
            SetupGraph mSetup = new SetupGraph();

            mSetup.ShowDialog();

            try
            {
                mXInterval = mSetup.xInterval;
                mMin       = mSetup.min;
                mMax       = mSetup.max;

                if (mIsLoding)
                {
                    MetroMessageBox.Show(mParent, "불러오는 중에는 변경할 수 없습니다.", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                else
                {
                    //chart1.ChartAreas[0].AxisX.Interval = Convert.ToDouble(mXInterval);
                    //chart1.ChartAreas[0].AxisY.Minimum = Convert.ToDouble(mMin);
                    //chart1.ChartAreas[0].AxisY.Maximum = Convert.ToDouble(mMax);
                    //chartControl1
                    //XYDiagram diagram = chartControl1.Diagram as XYDiagram;
                    //XYDiagram diagram = (XYDiagram)chartControl1.Diagram;



                    SwiftPlotDiagram diagram = chartControl1.Diagram as SwiftPlotDiagram;
                    if (diagram != null)
                    {
                        diagram.AxisX.VisualRange.Auto            = false;
                        diagram.AxisX.VisualRange.AutoSideMargins = false;

                        diagram.AxisY.VisualRange.MinValue = BetteryMonitoringSystem.Properties.Settings.Default.BackupAxisYLow;
                        diagram.AxisY.VisualRange.MaxValue = BetteryMonitoringSystem.Properties.Settings.Default.BackupAxisYUpper;
                    }
                }
            }
            catch (Exception ex)
            {
                MetroMessageBox.Show(mParent, ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
コード例 #7
0
ファイル: MainForm.cs プロジェクト: damoOnly/SD
        // 切换曲线
        private void changeSeries(Equipment ep, bool isClear = true)
        {
            if (ep == null)
            {
                LogLib.Log.GetLogger(this).Warn("切换曲线时对象为空");
                return;
            }
            seriesOne.Name = ep.EName;
            seriesOne.Tag  = ep.ID;
            if (isClear)
            {
                seriesOne.Points.Clear();
            }

            SwiftPlotDiagram diagram_Tem = chartControl_Main.Diagram as SwiftPlotDiagram;

            diagram_Tem.AxisY.Title.Text = string.Format("浓度({0})", ep.Unit);
            diagram_Tem.AxisX.Range.SetMinMaxValues(minTime, maxTime);
            if (ep.Range > 0)
            {
                diagram_Tem.AxisY.Range.SetMinMaxValues(0, ep.Range);
            }

            List <EquipmentData> datalist = EquipmentDataDal.GetListByTime(ep.ID, minTime, maxTime);

            if (datalist == null)
            {
                return;
            }
            datalist.ForEach(c =>
            {
                SeriesPoint sp = new SeriesPoint(c.AddTime, c.Chroma);
                seriesOne.Points.Add(sp);
            });
            //datalist.Aggregate
        }
コード例 #8
0
ファイル: MainForm.cs プロジェクト: damoOnly/SD
        // 设置历史曲线
        private void setX(List <EquipmentData> list)
        {
            try
            {
                if (list == null || list.Count < 1)
                {
                    return;
                }

                list.Sort((customer1, customer2) => customer1.AddTime.CompareTo(customer2.AddTime));
                DateTime dt1 = list.First().AddTime;
                DateTime dt2 = list.Last().AddTime;
                TimeSpan ts  = dt2 - dt1;

                SwiftPlotDiagram spd = chartControl_History.Diagram as SwiftPlotDiagram;

                if (ts.TotalMinutes < 1)
                {
                    spd.AxisX.DateTimeGridAlignment  = DateTimeMeasurementUnit.Second;
                    spd.AxisX.DateTimeMeasureUnit    = DateTimeMeasurementUnit.Second;
                    spd.AxisX.DateTimeOptions.Format = DateTimeFormat.LongTime;
                    spd.AxisX.Range.SetMinMaxValues(dt1, dt2);
                    spd.AxisX.Range.ScrollingRange.SetMinMaxValues(dt1, dt2);
                }
                // 时间范围在1小时以内
                else if (ts.TotalHours < 1)
                {
                    spd.AxisX.DateTimeGridAlignment  = DateTimeMeasurementUnit.Minute;
                    spd.AxisX.DateTimeMeasureUnit    = DateTimeMeasurementUnit.Minute;
                    spd.AxisX.DateTimeOptions.Format = DateTimeFormat.LongTime;
                    if (dt1.AddHours(1) > dt2)
                    {
                        spd.AxisX.Range.SetMinMaxValues(dt1, dt2);
                    }
                    else
                    {
                        spd.AxisX.Range.SetMinMaxValues(dt1, dt1.AddHours(1));
                    }
                    spd.AxisX.Range.ScrollingRange.MinValue = dt1;
                    spd.AxisX.Range.ScrollingRange.MaxValue = dt2;
                }
                // 1天以内
                else if (ts.TotalDays <= 1)
                {
                    spd.AxisX.DateTimeGridAlignment  = DateTimeMeasurementUnit.Minute;
                    spd.AxisX.DateTimeMeasureUnit    = DateTimeMeasurementUnit.Minute;
                    spd.AxisX.DateTimeOptions.Format = DateTimeFormat.LongTime;
                    if (dt1.AddHours(12) > dt2)
                    {
                        spd.AxisX.Range.SetMinMaxValues(dt1, dt2);
                    }
                    else
                    {
                        spd.AxisX.Range.SetMinMaxValues(dt1, dt1.AddHours(12));
                    }
                    spd.AxisX.Range.ScrollingRange.MinValue = dt1;
                    spd.AxisX.Range.ScrollingRange.MaxValue = dt2;
                }
                // 1个星期以内
                else if (ts.TotalDays < 7)
                {
                    spd.AxisX.DateTimeGridAlignment        = DateTimeMeasurementUnit.Hour;
                    spd.AxisX.DateTimeMeasureUnit          = DateTimeMeasurementUnit.Hour;
                    spd.AxisX.DateTimeOptions.Format       = DateTimeFormat.Custom;
                    spd.AxisX.DateTimeOptions.FormatString = "dd HH:mm";
                    if (dt1.AddDays(3) > dt2)
                    {
                        spd.AxisX.Range.SetMinMaxValues(dt1, dt2);
                    }
                    else
                    {
                        spd.AxisX.Range.SetMinMaxValues(dt1, dt1.AddDays(3));
                    }
                    spd.AxisX.Range.ScrollingRange.MinValue = dt1;
                    spd.AxisX.Range.ScrollingRange.MaxValue = dt2;
                }
                // 1个月以内
                else if (ts.TotalDays < 30)
                {
                    spd.AxisX.DateTimeGridAlignment        = DateTimeMeasurementUnit.Hour;
                    spd.AxisX.DateTimeMeasureUnit          = DateTimeMeasurementUnit.Hour;
                    spd.AxisX.DateTimeOptions.Format       = DateTimeFormat.Custom;
                    spd.AxisX.DateTimeOptions.FormatString = "yyyy-MM-dd HH:mm";
                    if (dt1.AddDays(15) > dt2)
                    {
                        spd.AxisX.Range.SetMinMaxValues(dt1, dt2);
                    }
                    else
                    {
                        spd.AxisX.Range.SetMinMaxValues(dt1, dt1.AddDays(15));
                    }
                    spd.AxisX.Range.ScrollingRange.MinValue = dt1;
                    spd.AxisX.Range.ScrollingRange.MaxValue = dt2;
                }
                // 1年以内
                else
                {
                    spd.AxisX.DateTimeGridAlignment  = DateTimeMeasurementUnit.Month;
                    spd.AxisX.DateTimeMeasureUnit    = DateTimeMeasurementUnit.Day;
                    spd.AxisX.DateTimeOptions.Format = DateTimeFormat.LongDate;
                    if (dt1.AddDays(30) > dt2)
                    {
                        spd.AxisX.Range.SetMinMaxValues(dt1, dt2);
                    }
                    else
                    {
                        spd.AxisX.Range.SetMinMaxValues(dt1, dt1.AddDays(30));
                    }

                    spd.AxisX.Range.ScrollingRange.MinValue = dt1;
                    spd.AxisX.Range.ScrollingRange.MaxValue = dt2;
                }
            }
            catch (Exception e)
            {
                LogLib.Log.GetLogger(this).Warn(e);
            }
        }
コード例 #9
0
        private void simpleButton3_Click(object sender, EventArgs e)
        {
            gridControl2.DataSource = null;
            chartControl2.Series[0].Points.Clear();
            if (comboBoxEdit1.Text.Trim() == string.Empty)
            {
                XtraMessageBox.Show("请选择设备名称");
                return;
            }
            if (comboBoxEdit4.Text.Trim() == string.Empty)
            {
                XtraMessageBox.Show("请选择气体名称");
                return;
            }
            TimeSpan ts  = dateEdit2.DateTime - dateEdit1.DateTime;
            TimeSpan ts1 = new TimeSpan(0, 0, 0, 1);

            if (ts < ts1)
            {
                XtraMessageBox.Show("截止时间必须大于起始时间");
                return;
            }
            Equipment eq = mainList.Find(c => c.Name == comboBoxEdit1.Text.Trim() && c.GasName == comboBoxEdit4.Text.Trim());
            //9.17格式化日期和时间
            //string str1 = dateEdit1.Text;
            //DateTime format_time1;
            //DateTime.TryParse(str1, out format_time1);
            //str1 = format_time1.ToString("yyyy-MM-dd HH:mm:ss");
            //string str2 = dateEdit2.Text;
            //DateTime format_time2;
            //DateTime.TryParse(str2, out format_time2);
            //str2 = format_time2.ToString("yyyy-MM-dd HH:mm:ss");
            //List<EquipmentData> data = InputDataDal.GetListByTime(eq.ID, str1, str2);
            //9.17格式化日期和时间
            List <EquipmentData> data = InputDataDal.GetListByTime(eq.ID, dateEdit1.DateTime, dateEdit2.DateTime);

            if (data == null || data.Count < 1)
            {
                LogLib.Log.GetLogger(this).Warn("数据库中没有记录");
                return;
            }
            gridControl2.DataSource = data;
            gridView2.BestFitColumns();
            data.ForEach(c =>
            {
                chartControl2.Series[0].Points.Add(new SeriesPoint(c.AddTime, c.Chroma));
            });

            float max = data.Max(c => c.Chroma);
            float min = data.Min(c => c.Chroma);

            textEdit7.Text = max.ToString();
            textEdit5.Text = min.ToString();
            textEdit6.Text = ((max + min) / 2).ToString();

            // 更改曲线纵坐标描述
            SwiftPlotDiagram diagram_Tem = chartControl2.Diagram as SwiftPlotDiagram;

            diagram_Tem.AxisY.Title.Text = comboBoxEdit4.Text + ":" + data.First().Unit;
            if (eq.Max > 0)
            {
                diagram_Tem.AxisY.Range.SetMinMaxValues(0, eq.Max);
            }

            setX(data);
        }
コード例 #10
0
        private void TimeDrawLine()
        {
            if (chartControl1.Series.Count < 1)
            {
                return;
            }
            //构建 表格,用于绑定
            AnalogBll al = DeviceObj.GetDevice().AnalogList.Find(delegate(AnalogBll abll) { return(abll.AnalogInfo.SignalName == cbSignalName.Text ? true : false); });
            object   svalue = al.AnalogInfo.Value;
            DateTime dtime  = DateTime.Now;

            //如果图中最后一个点 的时间 是最新一个点的时间,则直接返回
            if (chartControl1.Series[0].Points.Count > 0)
            {
                if (PreTime != null)
                {
                    if (PreTime == dtime)
                    {
                        return;
                    }
                }
            }
            //否则,将最新点的时间 记录下来
            PreTime = dtime;

            DateTime argument = PreTime;

            DateTime minDate = argument.AddSeconds(-TimeInterval);
            //需要移除的点个数
            int pointsToRemoveCount = 0;

            //如果 某个点的时间小于坐标轴最小时间,则+1
            foreach (SeriesPoint point in chartControl1.Series[0].Points)
            {
                if (point.DateTimeArgument < minDate)
                {
                    pointsToRemoveCount++;
                }
            }
            //如果 ........?
            if (pointsToRemoveCount < chartControl1.Series[0].Points.Count)
            {
                pointsToRemoveCount--;
            }

            SeriesPoint pointsToUpdate = new SeriesPoint(argument, svalue);//Convert.ToDouble(String.Format("{0:F}", Dr[0]["信号值"]))

            //将最新点 添加到显示序列
            chartControl1.Series[0].Points.Add(pointsToUpdate);

            if (pointsToRemoveCount > 0)
            {
                chartControl1.Series[0].Points.RemoveRange(0, pointsToRemoveCount);
            }
            SwiftPlotDiagram diagram = chartControl1.Diagram as SwiftPlotDiagram;

            if (diagram != null && diagram.AxisX.DateTimeMeasureUnit == DateTimeMeasurementUnit.Millisecond)
            {
                diagram.AxisX.Range.SetMinMaxValues(minDate, argument);
            }

            diagram.EnableAxisYScrolling = true;
            diagram.EnableAxisYZooming   = true;
        }
コード例 #11
0
        private void Gethistorydata(object parm)
        {
            DataTable dataTable = (parm as List <object>)[0] as DataTable;

            Series[]   listSeries = (parm as List <object>)[1] as Series[];
            List <int> listeqid   = (parm as List <object>)[2] as List <int>;

            Stopwatch watch = new Stopwatch();

            watch.Start();
            List <EquipmentData> data = EquipmentDataDal.GetListByTime2(String.Join(",", listeqid), dateEdit1.DateTime, dateEdit2.DateTime);

            Trace.WriteLine("get database: " + watch.Elapsed);
            watch.Restart();
            IEnumerable <IGrouping <string, EquipmentData> > gridTable = data.GroupBy(c => c.AddTimeStr);

            foreach (var item in gridTable)
            {
                DataRow row = dataTable.NewRow();
                row[0] = item.Key;
                row[1] = item.FirstOrDefault().Unit;
                List <EquipmentData> list2 = item.OrderBy(c => c.ID).ToList();
                for (int i = 0; i < list2.Count; i++)
                {
                    row[i + 2] = list2[i].Chroma;
                }
                dataTable.Rows.Add(row);
            }
            Trace.WriteLine("table foreach: " + watch.Elapsed);
            watch.Restart();
            IEnumerable <IGrouping <int, EquipmentData> > chartTable = data.GroupBy(c => c.EquipmentID);

            foreach (var item in chartTable)
            {
                Series series = listSeries.FirstOrDefault(c => ((int)c.Tag) == item.Key);
                foreach (var item2 in item)
                {
                    series.Points.Add(new SeriesPoint(item2.AddTimeStr, item2.Chroma));
                }
            }

            Trace.WriteLine("series foreach: " + watch.Elapsed);
            watch.Restart();
            this.Invoke(new Action <DataTable>((datatable) => this.gridControl2.DataSource = datatable), dataTable);
            Trace.WriteLine("banding table: " + watch.Elapsed);
            watch.Restart();
            //gridView2.BestFitColumns();
            this.Invoke(new Action <Series[], IEnumerable <IGrouping <string, EquipmentData> > >((listseries, gridtable) =>
            {
                //chartControl2.
                this.chartControl2.Series.AddRange(listseries);
                Trace.WriteLine("bangding series: " + watch.Elapsed);
                watch.Stop();
                if (this.chartControl2.Series.Count <= 0)
                {
                    this.chartControl2.Series.Add(new Series("曲线", ViewType.SwiftPlot));
                }
                //// 更改曲线纵坐标描述
                SwiftPlotDiagram diagram_Tem     = this.chartControl2.Diagram as SwiftPlotDiagram;
                diagram_Tem.EnableAxisXScrolling = true;
                diagram_Tem.AxisY.Title.Text     = "浓度";

                setX(DateTime.Parse(gridtable.FirstOrDefault().Key), DateTime.Parse(gridtable.LastOrDefault().Key));
            }), listSeries, gridTable);
        }
コード例 #12
0
        private void setX(DateTime dt1, DateTime dt2)
        {
            try
            {
                TimeSpan ts = dt2 - dt1;

                SwiftPlotDiagram spd = chartControl2.Diagram as SwiftPlotDiagram;

                if (ts.TotalMinutes < 1)
                {
                    spd.AxisX.DateTimeGridAlignment  = DateTimeMeasurementUnit.Second;
                    spd.AxisX.DateTimeMeasureUnit    = DateTimeMeasurementUnit.Second;
                    spd.AxisX.DateTimeOptions.Format = DateTimeFormat.LongTime;
                    spd.AxisX.Range.SetMinMaxValues(dt1, dt2);
                    spd.AxisX.Range.ScrollingRange.SetMinMaxValues(dt1, dt2);
                }
                // 时间范围在1小时以内
                else if (ts.TotalHours < 1)
                {
                    spd.AxisX.DateTimeGridAlignment  = DateTimeMeasurementUnit.Minute;
                    spd.AxisX.DateTimeMeasureUnit    = DateTimeMeasurementUnit.Second;
                    spd.AxisX.DateTimeOptions.Format = DateTimeFormat.LongTime;
                    if (dt1.AddHours(1) > dt2)
                    {
                        spd.AxisX.Range.SetMinMaxValues(dt1, dt2);
                    }
                    else
                    {
                        spd.AxisX.Range.SetMinMaxValues(dt1, dt1.AddHours(1));
                    }
                    spd.AxisX.Range.ScrollingRange.MinValue = dt1;
                    spd.AxisX.Range.ScrollingRange.MaxValue = dt2;
                }
                // 1天以内
                else if (ts.TotalDays <= 1)
                {
                    spd.AxisX.DateTimeGridAlignment  = DateTimeMeasurementUnit.Minute;
                    spd.AxisX.DateTimeMeasureUnit    = DateTimeMeasurementUnit.Second;
                    spd.AxisX.DateTimeOptions.Format = DateTimeFormat.LongTime;
                    if (dt1.AddHours(12) > dt2)
                    {
                        spd.AxisX.Range.SetMinMaxValues(dt1, dt2);
                    }
                    else
                    {
                        spd.AxisX.Range.SetMinMaxValues(dt1, dt1.AddHours(12));
                    }
                    spd.AxisX.Range.ScrollingRange.MinValue = dt1;
                    spd.AxisX.Range.ScrollingRange.MaxValue = dt2;
                }
                // 1个星期以内
                else if (ts.TotalDays < 7)
                {
                    spd.AxisX.DateTimeGridAlignment        = DateTimeMeasurementUnit.Hour;
                    spd.AxisX.DateTimeMeasureUnit          = DateTimeMeasurementUnit.Second;
                    spd.AxisX.DateTimeOptions.Format       = DateTimeFormat.Custom;
                    spd.AxisX.DateTimeOptions.FormatString = "dd HH:mm";
                    if (dt1.AddDays(3) > dt2)
                    {
                        spd.AxisX.Range.SetMinMaxValues(dt1, dt2);
                    }
                    else
                    {
                        spd.AxisX.Range.SetMinMaxValues(dt1, dt1.AddDays(3));
                    }
                    spd.AxisX.Range.ScrollingRange.MinValue = dt1;
                    spd.AxisX.Range.ScrollingRange.MaxValue = dt2;
                }
                // 1个月以内
                else if (ts.TotalDays < 30)
                {
                    spd.AxisX.DateTimeGridAlignment        = DateTimeMeasurementUnit.Hour;
                    spd.AxisX.DateTimeMeasureUnit          = DateTimeMeasurementUnit.Second;
                    spd.AxisX.DateTimeOptions.Format       = DateTimeFormat.Custom;
                    spd.AxisX.DateTimeOptions.FormatString = "yyyy-MM-dd HH:mm";
                    if (dt1.AddDays(15) > dt2)
                    {
                        spd.AxisX.Range.SetMinMaxValues(dt1, dt2);
                    }
                    else
                    {
                        spd.AxisX.Range.SetMinMaxValues(dt1, dt1.AddDays(15));
                    }
                    spd.AxisX.Range.ScrollingRange.MinValue = dt1;
                    spd.AxisX.Range.ScrollingRange.MaxValue = dt2;
                }
                // 1年以内
                else
                {
                    spd.AxisX.DateTimeGridAlignment  = DateTimeMeasurementUnit.Month;
                    spd.AxisX.DateTimeMeasureUnit    = DateTimeMeasurementUnit.Day;
                    spd.AxisX.DateTimeOptions.Format = DateTimeFormat.LongDate;
                    if (dt1.AddDays(30) > dt2)
                    {
                        spd.AxisX.Range.SetMinMaxValues(dt1, dt2);
                    }
                    else
                    {
                        spd.AxisX.Range.SetMinMaxValues(dt1, dt1.AddDays(30));
                    }

                    spd.AxisX.Range.ScrollingRange.MinValue = dt1;
                    spd.AxisX.Range.ScrollingRange.MaxValue = dt2;
                }
            }
            catch (Exception e)
            {
                LogLib.Log.GetLogger(this).Warn(e);
            }
        }
コード例 #13
0
        // 查询数据
        private void simpleButton3_Click_1(object sender, EventArgs e)
        {
            try
            {
                gridControl2.DataSource = null;
                chartControl2.Series.Clear();
                gridView2.Columns.Clear();

                if (checkedComboBoxEdit1.Text.Trim() == string.Empty)
                {
                    XtraMessageBox.Show("请选择设备");
                    return;
                }
                TimeSpan ts  = dateEdit2.DateTime - dateEdit1.DateTime;
                TimeSpan ts1 = new TimeSpan(0, 0, 0, 1);
                if (ts < ts1)
                {
                    XtraMessageBox.Show("截止时间必须大于起始时间");
                    return;
                }

                DateTime  dt1       = DateTime.MinValue;
                DateTime  dt2       = DateTime.MaxValue;
                DataTable dataTable = new DataTable();
                // 列计数器
                int lolumnIndex = 1;
                // 最大的行值
                int maxRowNum = -1;
                foreach (CheckedListBoxItem item in checkedComboBoxEdit1.Properties.Items)
                {
                    if (item.CheckState != CheckState.Checked)
                    {
                        continue;
                    }
                    List <EquipmentData> data = EquipmentDataDal.GetListByTime(Convert.ToInt32(item.Value), dateEdit1.DateTime, dateEdit2.DateTime);
                    if (data == null || data.Count < 1)
                    {
                        continue;
                    }
                    // 还没有数据的时候,增加时间和单位列
                    if (dataTable.Columns.Count <= 0)
                    {
                        dataTable.Columns.Add("时间");
                        dataTable.Columns.Add("单位");
                    }
                    dataTable.Columns.Add(item.Description);

                    lolumnIndex++;
                    Series series = new Series(item.Description, ViewType.SwiftPlot);
                    series.ArgumentScaleType = ScaleType.DateTime;
                    // 行计数器
                    int rowNum = 0;
                    data.ForEach(c =>
                    {
                        series.Points.Add(new SeriesPoint(c.AddTime, c.Chroma));
                        DataRow dataRow;
                        if (rowNum > maxRowNum - 1)
                        {
                            dataRow = dataTable.NewRow();
                            dataTable.Rows.Add(dataRow);
                        }
                        else
                        {
                            dataRow = dataTable.Rows[rowNum];
                        }
                        // 说明需要增加时间和单位数据
                        if (lolumnIndex == 2 || rowNum > maxRowNum - 1)
                        {
                            dataRow[0] = c.AddTime;
                            dataRow[1] = c.Unit;
                        }
                        dataRow[lolumnIndex] = c.Chroma;
                        rowNum++;
                    });
                    maxRowNum = maxRowNum > rowNum ? maxRowNum : rowNum;
                    float max = data.Max(c => c.Chroma);
                    float min = data.Min(c => c.Chroma);
                    textEdit7.Text = max.ToString();
                    textEdit5.Text = min.ToString();
                    textEdit6.Text = ((max + min) / 2).ToString();

                    //data.Sort((customer1, customer2) => customer1.AddTime.CompareTo(customer2.AddTime));
                    //if (dt1 == DateTime.MinValue)
                    //{
                    //    dt1 = data.First().AddTime;
                    //}
                    //else
                    //{
                    //    dt1 = dt1 < data.First().AddTime ? dt1 : data.First().AddTime;
                    //}

                    //if (dt2 == DateTime.MaxValue)
                    //{
                    //    dt2 = data.Last().AddTime;
                    //}
                    //else
                    //{
                    //    dt2 = dt2 > data.Last().AddTime ? dt2 : data.Last().AddTime;
                    //}
                    chartControl2.Series.Add(series);
                }

                gridControl2.DataSource = dataTable;
                gridView2.BestFitColumns();
                if (chartControl2.Series.Count <= 0)
                {
                    chartControl2.Series.Add(new Series("曲线", ViewType.SwiftPlot));
                }
                //// 更改曲线纵坐标描述
                SwiftPlotDiagram diagram_Tem = chartControl2.Diagram as SwiftPlotDiagram;
                diagram_Tem.EnableAxisXScrolling = true;
                diagram_Tem.AxisY.Title.Text     = "浓度";


                //diagram_Tem.AxisX.DateTimeGridAlignment = DateTimeMeasurementUnit.Minute;
                //diagram_Tem.AxisX.DateTimeMeasureUnit = DateTimeMeasurementUnit.Second;
                //diagram_Tem.AxisX.DateTimeOptions.Format = DateTimeFormat.LongTime;


                //diagram_Tem.AxisX.Range.ScrollingRange.Auto = false;
                //diagram_Tem.AxisX.Range.ScrollingRange.SetMinMaxValues(dt1.AddMinutes(-1), dt2.AddMinutes(1));
                //diagram_Tem.AxisX.Range.Auto = false;
                //diagram_Tem.AxisX.Range.SetMinMaxValues(dt1, dt1.AddMinutes(2));



                //if (dt1 != DateTime.MinValue && dt2 != DateTime.MaxValue)
                //{
                //    setX(dt1, dt2);
                //}


                //9.16从时间控件上获取的值,与数据库记录格式不统一,须做进一步处理
                //9.18格式化日期,以2015-0X-0X方式对齐

                //string str1 = dateEdit1.Text;
                //DateTime format_time1;
                //DateTime.TryParse(str1, out format_time1);
                //str1 = format_time1.ToString("yyyy-MM-dd HH:mm:ss");

                //string str2 = dateEdit2.Text;
                //DateTime format_time2;
                //DateTime.TryParse(str2, out format_time2);
                //str2 = format_time2.ToString("yyyy-MM-dd HH:mm:ss");
                //List<EquipmentData> data = EquipmentDataDal.GetListByTime(eq.ID, dateEdit1.DateTime, dateEdit2.DateTime)


                //if (eq.Max > 0)
                //{
                //    diagram_Tem.AxisY.Range.SetMinMaxValues(0, eq.Max);
                //}
                //chartControl2.Series.EndUpdate();
            }
            catch (Exception ex)
            {
                LogLib.Log.GetLogger(this).Warn(ex);
            }
        }