dev图表控件

happy9909 2016-02-26 10:17:02
谁用过dev的图标控件?
demo里面的这个效果怎么实现?就是X轴可以通过鼠标齿轮滚动,自动伸缩。
就这么多分了,请用过dev控件的朋友指点一下。

...全文
1017 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
江南小鱼 2016-03-01
  • 打赏
  • 举报
回复
引用 10 楼 happy9909 的回复:
@西门吹灯 感谢回复! 不过上面代码,显示同一天的时候,会有问题。 上面的代码,改成:
DataTable CreateData(int rows)
        {
            Random _r = new Random();

            DataTable dt = new DataTable();
            dt.Columns.Add("Arg", typeof(DateTime));
            dt.Columns.Add("Value", typeof(int));
            DateTime now = DateTime.Now;
            for (int i = 0; i < rows; i++)
            {
                dt.Rows.Add(now.AddHours(i), _r.Next(50));
            }

            return dt;
        }
确实,估计是dev图表控件的bug~
happy9909 2016-03-01
  • 打赏
  • 举报
回复
@西门吹灯 感谢回复! 不过上面代码,显示同一天的时候,会有问题。 上面的代码,改成:
DataTable CreateData(int rows)
        {
            Random _r = new Random();

            DataTable dt = new DataTable();
            dt.Columns.Add("Arg", typeof(DateTime));
            dt.Columns.Add("Value", typeof(int));
            DateTime now = DateTime.Now;
            for (int i = 0; i < rows; i++)
            {
                dt.Rows.Add(now.AddHours(i), _r.Next(50));
            }

            return dt;
        }
江南小鱼 2016-03-01
  • 打赏
  • 举报
回复
using System;
using System.Collections.Generic;
using System.Linq;
using DevExpress.XtraEditors;
using System.Data;
using DevExpress.XtraCharts;

namespace NewProject
{
    public partial class Form1 : XtraForm
    {
        ViewType CurrentViewType = ViewType.Line;

        public Form1()
        {
            InitializeComponent();

            UpdateDataSource();
            InitializeChartControl();
        }

        DataTable CreateData(int rows)
        {
            Random _r = new Random();

            DataTable dt = new DataTable();
            dt.Columns.Add("Arg", typeof(DateTime));
            dt.Columns.Add("Value", typeof(int));

            DateTime now = DateTime.Now;
            for (int i = 0; i < rows; i++)
            {
                dt.Rows.Add(now.AddMinutes(i), _r.Next(50));
            }

            return dt;
        }

        private void InitializeChartControl()
        {
            chartControl1.Series.Clear();
            chartControl1.Series.Add("MainSeries", CurrentViewType);

            chartControl1.Series[0].ValueDataMembers.AddRange(new string[] { "Value" });
            chartControl1.Series[0].ArgumentDataMember = "Arg";
            chartControl1.Series[0].ArgumentScaleType = ScaleType.Qualitative;
            
            XYDiagram diagram = (XYDiagram)chartControl1.Diagram;
            diagram.AxisX.DateTimeOptions.Format = DateTimeFormat.Custom;

            diagram.EnableAxisXZooming = true;
            diagram.EnableAxisXScrolling = true;
            
            CustomizeLabels(chartControl1);
            chartControl1.Zoom += chartControl1_Zoom;
        }

        void chartControl1_Zoom(object sender, ChartZoomEventArgs e)
        {
            ChartControl chartControl = (ChartControl)sender;
            CustomizeLabels(chartControl);
        }

        private void UpdateDataSource()
        {
            chartControl1.DataSource = CreateData(700);
        }

        private void CustomizeLabels(ChartControl chartControl)
        {
            XYDiagram diagram = (XYDiagram)chartControl.Diagram;

            double max = diagram.AxisX.Range.MaxValueInternal;
            double min = diagram.AxisX.Range.MinValueInternal;
            diagram.AxisX.CustomLabels.Clear();

            Series AvgSeries = new Series("AvgSeries", CurrentViewType);
            SeriesPoint point = null;
            
            for (int i = 0; i < chartControl.Series[0].Points.Count; i++)
            {
                if (i % Math.Round((max - min) / 7) == 0)
                {
                    DateTime dataArg = chartControl.Series[0].Points[i].DateTimeArgument;
                    diagram.AxisX.CustomLabels.Add(new CustomAxisLabel(dataArg.ToString("yyyy-MM-dd HH:mm"), dataArg));

                    point = new SeriesPoint(dataArg, 10);
                    AvgSeries.Label.Visible = false;
                    AvgSeries.Points.Add(point);
                }
            }
            if (chartControl1.Series.Count == 1)
            {
                chartControl1.Series.Add(AvgSeries);
            }
        }
    }
}
1、同一天显示也是OK的 2、建议放弃这种实现方式,这种是通过滚动鼠标齿轮,动态重绘X轴坐标点,数据量在几百就会出现特别 卡的的现象 3、diagram.AxisX.Range.MaxValueInternal在滚动过齿轮、窗体大小发生变化的时候,都会改变。会给再你改变图标数据源的时候,带来一定的麻烦。
足球中国 2016-02-29
  • 打赏
  • 举报
回复
步骤比较多。demo里面有这个滚动的例子。
江南小鱼 2016-02-29
  • 打赏
  • 举报
回复
public ViewType CurrentViewType { get; set; }
        DataTable DataTable;

        public Form1()
        {
            InitializeComponent();

            UpdateDataSource();
            InitializeChartControl();
        }

        DataTable CreateData(int rows)
        {
            Random _r = new Random();

            DataTable dt = new DataTable();
            dt.Columns.Add("Arg", typeof(DateTime));
            dt.Columns.Add("Value", typeof(int));
            for (int i = 0; i < rows; i++)
            {
                dt.Rows.Add(DateTime.Now.AddDays(i), _r.Next(50));
            }

            return dt;
        }

        private void InitializeChartControl()
        {
            CurrentViewType = ViewType.Line;
            chartControl1.Series.Clear();
            int lastSeriesIndex = chartControl1.Series.Add("MainSeries", CurrentViewType);

            chartControl1.Series[lastSeriesIndex].ValueDataMembers.AddRange(new string[] { "Value" });
            chartControl1.Series[lastSeriesIndex].ArgumentDataMember = "Arg";
            chartControl1.Series[lastSeriesIndex].ArgumentScaleType = ScaleType.DateTime;

            XYDiagram diagram = (XYDiagram)chartControl1.Diagram;
            diagram.AxisX.DateTimeOptions.Format = DateTimeFormat.Custom;

            diagram.EnableAxisXZooming = true;
            diagram.EnableAxisXScrolling = true;
            //diagram.AxisX.Range.MaxValue = DateTime.Now.AddDays(50);
            //diagram.AxisX.Range.MinValue = DateTime.Now;
            CustomizeLabels(chartControl1);
            chartControl1.Zoom += chartControl1_Zoom;
        }

        void chartControl1_Zoom(object sender, ChartZoomEventArgs e)
        {
            ChartControl chartControl = (ChartControl)sender;
            CustomizeLabels(chartControl);
        }

        private void UpdateDataSource()
        {
            chartControl1.DataSource = DataTable = CreateData(40);
        }

        private static void CustomizeLabels(ChartControl chartControl)
        {
            XYDiagram diagram = (XYDiagram)chartControl.Diagram;

            double max = diagram.AxisX.Range.MaxValueInternal;
            double min = diagram.AxisX.Range.MinValueInternal;
            diagram.AxisX.CustomLabels.Clear();
            for (int i = 0; i < chartControl.Series[0].Points.Count; i++)
            {
                if (i % Math.Round((max - min) / 7) == 0)
                {
                    DateTime dataArg = chartControl.Series[0].Points[i].DateTimeArgument;
                    diagram.AxisX.CustomLabels.Add(new CustomAxisLabel(dataArg.ToString("yyyy-MM-dd HH:mm"), dataArg));
                }
            }
        }
happy9909 2016-02-29
  • 打赏
  • 举报
回复
引用 7 楼 zanfeng 的回复:
步骤比较多。demo里面有这个滚动的例子。
是有这个例子,就是上面的贴图。 但是我想要的是X轴显示yyyy-MM-dd HH:mm:ss这种格式的数据,整不出来贴图的效果哎
happy9909 2016-02-28
  • 打赏
  • 举报
回复
引用 4 楼 shingoscar 的回复:
写demo你不是还看不懂
dev的demo有代码不错,那些代码不是直接拿来就能用的。
happy9909 2016-02-28
  • 打赏
  • 举报
回复
引用 4 楼 shingoscar 的回复:
写demo你不是还看不懂
大侠写个看看
Poopaye 2016-02-28
  • 打赏
  • 举报
回复
写demo你不是还看不懂
happy9909 2016-02-28
  • 打赏
  • 举报
回复
引用 2 楼 caozhy 的回复:
安装包里不是有sample么?有代码自己看
斑竹能写个demo么? demo里面的代码看不懂,不能直接使用~
threenewbee 2016-02-27
  • 打赏
  • 举报
回复
安装包里不是有sample么?有代码自己看
happy9909 2016-02-27
  • 打赏
  • 举报
回复
呼叫斑竹,江湖救急,不会用dev的chart控件。

4,816

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 图表区
社区管理员
  • 图表区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧