首页 新闻 会员 周边 捐助

MsChart股票指数图形郁闷滴问题求解.(C#)

3
悬赏园豆:40 [已关闭问题]

图表样式如上图,由于工作原因需要做一个类似股票指数走势图,

需要添加X轴为时间序列,

Y轴为指数价格,而且需要设定X轴的最大最小值,

我现在的解决方法是,循环读取数据集的每行数据,然后在Series中添加Point,X轴的值格式必须为DateTime.ToOADate(),因为MSCHART的坐标最大、小值必须要用Double类型的值指定。

但是现在的问题是,通过循环去添加每个Point太慢了,

实验过用微软提供的数据源绑定方法

this.chart2.Series[1].Points.DataBind(dt.DefaultView, "日期时间", "价格");

用这种方法的速度快很多,但是"日期时间"必须要是直接从sql查询出来的日期格式,如果"日期时间"是C#的日期格式,则不能像上图那样显示X轴的时间!

各位大侠,有没有用MsChart做过类似的股票指数图形的?

九九的主页 九九 | 初学一级 | 园豆:160
提问于:2010-08-05 21:42
< >
分享
其他回答(4)
0

画的挺好,没用过,我们都是自己放个链表,然后在屏幕上画.

你先用Sql从数据库生成一个dataTable,然后查看时间列的数据类型,这样,你就可以在客户端创建一个相同架构的DataTable,再把你的值填进去就OK了.

Launcher | 园豆:45050 (高人七级) | 2010-08-06 09:03
0

visifire,挺不错的,建议试试哦。

哥本哈士奇(aspnetx) | 园豆:310 (菜鸟二级) | 2010-08-06 09:14
0

MSChart好像不能设置最大值和最小值吧~~~

ZEKELOVE | 园豆:263 (菜鸟二级) | 2010-08-06 10:20
1

希望这个对你能有所帮助:先看效果图:

 

  public Form1()
        {
            InitializeComponent();

            var serieItem = this.chart1.Series[0];

            serieItem.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Spline;
           //X轴坐标 值类型为 时间类型
      serieItem.XValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Time;
            serieItem.IsValueShownAsLabel = true;
            serieItem.IsXValueIndexed = true;

            DataTable table = GetDataSource();
            DataPoint pointItem = null;
            for (int i = 0; i < table.Rows.Count; i++)
            {
                pointItem = new DataPoint();
                pointItem.SetValueXY(table.Rows[i]["TimeValue"], table.Rows[i]["Value"]);
                serieItem.Points.Add(pointItem);
            }
        }


        DataTable GetDataSource()
        {
            DataTable table = new DataTable();
            table.Columns.Add("Value", typeof(double));
            table.Columns.Add("TimeValue", typeof(DateTime));

            DataRow row = table.NewRow();

            row["Value"] = 45;
            row["TimeValue"] = DateTime.Parse("2010-08-08 9:30");
            table.Rows.Add(row);

            row = table.NewRow();
            row["Value"] = 50;
            row["TimeValue"] = DateTime.Parse("2010-08-08 10:00");
            table.Rows.Add(row);

            row = table.NewRow();
            row["Value"] = 55;
            row["TimeValue"] = DateTime.Parse("2010-08-08 10:30");
            table.Rows.Add(row);

            row = table.NewRow();
            row["Value"] = 45;
            row["TimeValue"] = DateTime.Parse("2010-08-08 11:00");
            table.Rows.Add(row);

            row = table.NewRow();
            row["Value"] = 52;
            row["TimeValue"] = DateTime.Parse("2010-08-08 11:30");
            table.Rows.Add(row);

            row = table.NewRow();
            row["Value"] = 43;
            row["TimeValue"] = DateTime.Parse("2010-08-08 12:00");
            table.Rows.Add(row);

            row = table.NewRow();
            row["Value"] = 60;
            row["TimeValue"] = DateTime.Parse("2010-08-08 12:30");
            table.Rows.Add(row);

            return table;
        }

提示:

  serieItem.XValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Time;
        

这句就是设置 X 轴 值的类型。

HUHU慈悲 | 园豆:9973 (大侠五级) | 2010-08-08 11:01
0

我知道怎么弄了。楼主按第二种方法做。横坐标最大值和最小值设置为ole 日期格式即可(这个是double型的)如:

  chartArea.AxisX.Minimum = new DateTime(2010, 9, 14, 0, 0, 1).ToOADate();        

 chartArea.AxisX.Maximum = new DateTime(2010, 9, 15, 23, 59, 0).ToOADate();

会长 | 园豆:12463 (专家六级) | 2010-11-09 16:41
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册