如上图,由于工作原因需要做一个类似股票指数走势图,
需要添加X轴为时间序列,
Y轴为指数价格,而且需要设定X轴的最大最小值,
我现在的解决方法是,循环读取数据集的每行数据,然后在Series中添加Point,X轴的值格式必须为DateTime.ToOADate(),因为MSCHART的坐标最大、小值必须要用Double类型的值指定。
但是现在的问题是,通过循环去添加每个Point太慢了,
实验过用微软提供的数据源绑定方法
this.chart2.Series[1].Points.DataBind(dt.DefaultView, "日期时间", "价格");
用这种方法的速度快很多,但是"日期时间"必须要是直接从sql查询出来的日期格式,如果"日期时间"是C#的日期格式,则不能像上图那样显示X轴的时间!
各位大侠,有没有用MsChart做过类似的股票指数图形的?
画的挺好,没用过,我们都是自己放个链表,然后在屏幕上画.
你先用Sql从数据库生成一个dataTable,然后查看时间列的数据类型,这样,你就可以在客户端创建一个相同架构的DataTable,再把你的值填进去就OK了.
visifire,挺不错的,建议试试哦。
MSChart好像不能设置最大值和最小值吧~~~
希望这个对你能有所帮助:先看效果图:
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 轴 值的类型。
我知道怎么弄了。楼主按第二种方法做。横坐标最大值和最小值设置为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();