示例#1
0
        private void service_GetStatisticsDataCompleted(object sender, GetStatisticsDataCompletedEventArgs e)
        {
            if (autoRefreshThread == null)
            {
                autoRefreshThread = new Thread(this.AutoRefreshAction)
                {
                    IsBackground = true,
                };
                autoRefreshThread.Start();
            }
            Refresh.IsEnabled = true;
            this.Busy.IsBusy  = false;

            if (e.Error != null)
            {
                e.Error.ShowError();
                return;
            }

            if (e.Result != null)
            {
                statData = e.Result.ToList();

                Chart.Title = string.Format("数据库: {0}  查询时间段:{1} - {2} 数据点总数:{3} 数据总条数:{4}", SearchCondition.DatabasePrefix,
                                            SearchCondition.BeginTime.ToString("yyyy/MM/dd HH:mm:ss"), SearchCondition.EndTime.ToString("yyyy/MM/dd HH:mm:ss"), statData.SelectMany(s => s.StatisticsItems).Count(), statData.SelectMany(s => s.StatisticsItems).Sum(s => s.Value));
                //初始化时间轴的格式,不同的粒度选择不同的格式
                DateTimeAxis dta           = Chart.Axes.OfType <DateTimeAxis>().FirstOrDefault();
                var          span          = (TimeSpanType.SelectedItem as ComboBoxItem).Tag.ToString();
                Style        dtaLabelStyle = new Style(typeof(DateTimeAxisLabel));
                switch (span)
                {
                case "Second":
                case "Minute":
                {
                    dtaLabelStyle.Setters.Add(new Setter(DateTimeAxisLabel.StringFormatProperty, "{0:HH:mm}"));
                    break;
                }

                case "Hour":
                {
                    dtaLabelStyle.Setters.Add(new Setter(DateTimeAxisLabel.StringFormatProperty, "{0:MM/dd HH.}"));
                    break;
                }

                case "Day":
                case "Week":
                {
                    dtaLabelStyle.Setters.Add(new Setter(DateTimeAxisLabel.StringFormatProperty, "{0:MM/dd}"));
                    break;
                }

                case "Month":
                {
                    dtaLabelStyle.Setters.Add(new Setter(DateTimeAxisLabel.StringFormatProperty, "{0:yyyy/MM/dd}"));
                    break;
                }
                }
                dta.AxisLabelStyle = dtaLabelStyle;


                //第一次需要初始化图表
                if (Chart.Series.Count == 0)
                {
                    for (int i = 0; i < statData.Count; i++)
                    {
                        var        item = statData[i];
                        LineSeries ls   = new LineSeries
                        {
                            Title                = item.TableName,
                            Tag                  = item.TableName,
                            ItemsSource          = item.StatisticsItems,
                            IndependentValuePath = "EndTime",
                            DependentValuePath   = "Value",
                            IsSelectionEnabled   = true,
                        };

                        ls.SelectionChanged += new SelectionChangedEventHandler(ls_SelectionChanged);
                        ls.MouseMove        += new MouseEventHandler(ls_MouseMove);

                        //点的样式
                        Style style = new Style(typeof(LineDataPoint));
                        style.Setters.Add(new Setter(LineDataPoint.BackgroundProperty, new SolidColorBrush(colorPool[i])));
                        style.Setters.Add(new Setter(LineDataPoint.BorderThicknessProperty, new Thickness(0)));
                        style.Setters.Add(new Setter(LineDataPoint.CursorProperty, Cursors.Hand));
                        style.Setters.Add(new Setter(Polyline.TagProperty, ls.Tag));
                        style.Setters.Add(new Setter(LineDataPoint.TemplateProperty, Application.Current.Resources["LineNoTransition"] as ControlTemplate));
                        ls.DataPointStyle = style;

                        //线条的样式
                        Style style2 = new Style(typeof(Polyline));
                        style2.Setters.Add(new Setter(Polyline.StrokeThicknessProperty, 1));
                        style2.Setters.Add(new Setter(Polyline.TagProperty, ls.Tag));
                        ls.PolylineStyle = style2;
                        Chart.Series.Add(ls);
                    }
                }
                else //重新设置数据源就可以了
                {
                    for (int i = 0; i < e.Result.Count; i++)
                    {
                        var item = e.Result[i];
                        var ls   = Chart.Series.OfType <LineSeries>().FirstOrDefault(s => s.Title.ToString() == item.TableName);
                        if (ls != null)
                        {
                            ls.ItemsSource = item.StatisticsItems;
                        }
                    }
                }

                Chart.LegendItems.OfType <LegendItem>().ToList().ForEach(legendItem =>
                {
                    legendItem.MouseLeftButtonDown += new MouseButtonEventHandler(legendItem_MouseLeftButtonDown);
                });

                //设置y轴的最大高度
                var max  = statData.SelectMany(r => r.StatisticsItems).Select(p => p.Value).Max();
                var axes = Chart.Axes.ToList().OfType <LinearAxis>().Where(a => a.Orientation == AxisOrientation.Y).FirstOrDefault();
                axes.Maximum = max + max * 0.1;
            }
        }
示例#2
0
        private void service_GetStatisticsDataCompleted(object sender, GetStatisticsDataCompletedEventArgs e)
        {
            if (autoRefreshThread == null)
            {
                autoRefreshThread = new Thread(this.AutoRefreshAction)
                {
                    IsBackground = true,
                };
                autoRefreshThread.Start();
            }
            Refresh.IsEnabled = true;
            this.Busy.IsBusy = false;

            if (e.Error != null)
            {
                e.Error.ShowError();
                return;
            }

            if (e.Result != null)
            {
                statData = e.Result.ToList();

                Chart.Title = string.Format("数据库: {0}  查询时间段:{1} - {2} 数据点总数:{3} 数据总条数:{4}", SearchCondition.DatabasePrefix, 
                    SearchCondition.BeginTime.ToString("yyyy/MM/dd HH:mm:ss"), SearchCondition.EndTime.ToString("yyyy/MM/dd HH:mm:ss"), statData.SelectMany(s=>s.StatisticsItems).Count(), statData.SelectMany(s=>s.StatisticsItems).Sum(s=>s.Value));
                //初始化时间轴的格式,不同的粒度选择不同的格式
                DateTimeAxis dta = Chart.Axes.OfType<DateTimeAxis>().FirstOrDefault();
                var span = (TimeSpanType.SelectedItem as ComboBoxItem).Tag.ToString();
                Style dtaLabelStyle = new Style(typeof(DateTimeAxisLabel));
                switch (span)
                {
                    case "Second":
                    case "Minute":
                        {
                            dtaLabelStyle.Setters.Add(new Setter(DateTimeAxisLabel.StringFormatProperty, "{0:HH:mm}"));
                            break;
                        }
                    case "Hour":
                        {
                            dtaLabelStyle.Setters.Add(new Setter(DateTimeAxisLabel.StringFormatProperty, "{0:MM/dd HH.}"));
                            break;
                        }
                    case "Day":
                    case "Week":
                        {
                            dtaLabelStyle.Setters.Add(new Setter(DateTimeAxisLabel.StringFormatProperty, "{0:MM/dd}"));
                            break;
                        }
                    case "Month":
                        {
                            dtaLabelStyle.Setters.Add(new Setter(DateTimeAxisLabel.StringFormatProperty, "{0:yyyy/MM/dd}"));
                            break;
                        }
                }
                dta.AxisLabelStyle = dtaLabelStyle;


                //第一次需要初始化图表
                if (Chart.Series.Count == 0)
                {
                    for (int i = 0; i < statData.Count; i++)
                    {
                        var item = statData[i];
                        LineSeries ls = new LineSeries
                        {
                            Title = item.TableName,
                            Tag = item.TableName,
                            ItemsSource = item.StatisticsItems,
                            IndependentValuePath = "EndTime",
                            DependentValuePath = "Value",
                            IsSelectionEnabled = true,
                        };

                        ls.SelectionChanged += new SelectionChangedEventHandler(ls_SelectionChanged);
                        ls.MouseMove += new MouseEventHandler(ls_MouseMove);

                        //点的样式
                        Style style = new Style(typeof(LineDataPoint));
                        style.Setters.Add(new Setter(LineDataPoint.BackgroundProperty, new SolidColorBrush(colorPool[i])));
                        style.Setters.Add(new Setter(LineDataPoint.BorderThicknessProperty, new Thickness(0)));
                        style.Setters.Add(new Setter(LineDataPoint.CursorProperty, Cursors.Hand));
                        style.Setters.Add(new Setter(Polyline.TagProperty, ls.Tag));
                        style.Setters.Add(new Setter(LineDataPoint.TemplateProperty, Application.Current.Resources["LineNoTransition"] as ControlTemplate));
                        ls.DataPointStyle = style;

                        //线条的样式
                        Style style2 = new Style(typeof(Polyline));
                        style2.Setters.Add(new Setter(Polyline.StrokeThicknessProperty, 1));
                        style2.Setters.Add(new Setter(Polyline.TagProperty, ls.Tag));
                        ls.PolylineStyle = style2;
                        Chart.Series.Add(ls);
                    }
                }
                else //重新设置数据源就可以了
                {
                    for (int i = 0; i < e.Result.Count; i++)
                    {
                        var item = e.Result[i];
                        var ls = Chart.Series.OfType<LineSeries>().FirstOrDefault(s => s.Title.ToString() == item.TableName);
                        if (ls != null)
                            ls.ItemsSource = item.StatisticsItems;
                    }
                }

                Chart.LegendItems.OfType<LegendItem>().ToList().ForEach(legendItem =>
                {
                    legendItem.MouseLeftButtonDown += new MouseButtonEventHandler(legendItem_MouseLeftButtonDown);
                });

                //设置y轴的最大高度
                var max = statData.SelectMany(r => r.StatisticsItems).Select(p => p.Value).Max();
                var axes = Chart.Axes.ToList().OfType<LinearAxis>().Where(a => a.Orientation == AxisOrientation.Y).FirstOrDefault();
                axes.Maximum = max + max * 0.1;
            }
        }