您的位置:首页 > 编程语言 > C#

c#(winform)使用mschart控件制作图表-----问题及解决

2010-01-29 21:00 781 查看
最近需要将电能值与时间的表用图表显示,查看vs2005(.net2.0)居然没有图表控件,提说。net3.5添加了图表chart控件,但是现在环境不能改变,只能寻求他法。

在COM控件集中有一个microsoft chart control,version6.0(oledb),简单地查了相关资料,发现可用,比较简单基础的一个控件,因为图表功能需求很简单,所以也没想什么专业图表控件。

首先,新建一个windows应用程序项目,一个简单的form。在左侧工具箱右键出现的选项中选择"选择项",在com集中找microsoft chart control,version6.0(oledb),添加。此时左侧工具箱会出现该控件,

将该控件拖入form即可,一些操作和其他控件相似。

第二,查看msdn或利用搜索引擎了解该控件的属性和方法,按需求进行相应配置。

第三,为控件添加数据。此处出现一些小问题,就是数据集的赋值,是二维数组,横坐标X是时间字符串,纵坐标Y是电能值,而传入参数需要的是字符串和long,这种二维数组只能自己定义数据类型了。

class mydata
{
public long powernum;
public string time;
}


今天有点累,直接上代码吧

private void showchart(DataSet sqlkfDataSet1)//传入数据集 可是查询数据库或自己构造
{
mydata[] myda = new mydata[5];
for (short i = 0; i < 5; i++)
{
myda[i] = new mydata();
string s = sqlkfDataSet1.Tables[0].Rows[i][0].ToString();
myda[i].powernum =Convert.ToInt64(s);
myda[i].time = sqlkfDataSet1.Tables[0].Rows[i][1].ToString().Substring(5)+"("+myda[i].powernum.ToString()+")";
}
axMSChart.ChartData = new Object[6, 2] { { "电能表1", "电能表1"  },
{myda[0].time,myda[0].powernum},
{myda[1].time,myda[1].powernum},
{myda[2].time,myda[2].powernum},
{myda[3].time,myda[3].powernum},
{myda[4].time,myda[4].powernum},
};
// Add a title and legend on the right side of the chart.
axMSChart.Title.Text = "电能量";
axMSChart.Legend.Location.LocationType = MSChart20Lib.VtChLocationType.VtChLocationTypeRight;
axMSChart.Legend.Location.Visible = true;
axMSChart.Plot.get_Axis(MSChart20Lib.VtChAxisId.VtChAxisIdX, null).AxisTitle.Text = "日期";
axMSChart.Plot.get_Axis(MSChart20Lib.VtChAxisId.VtChAxisIdY, null).AxisTitle.Text = "电量";
axMSChart.chartType = MSChart20Lib.VtChChartType.VtChChartType2dLine;
axMSChart.Stacking = false;
}


遇到的问题1:

字体过长会出现竖排,字体不清晰,需要改变控件大小

解决方法:每次只显示5个时间点,利用刻度控件进行左右调整。

遇到的问题2:

如何选择某个刻度左侧的5个值

解决方法:

int index=this.trackBarpowercount.Maximum-this.trackBarpowercount.Value;//this.trackBarpowercount.Maximum刻度最大值为数据总条数 this.trackBarpowercount.Value刻度当前值

string sqlcom = "SELECT TOP 5 powernum, rtime from (SELECT TOP 5 powernum, rtime FROM fk_powernum WHERE  rtime NOT IN (SELECT TOP " + index.ToString() + " rtime FROM fk_powernum ORDER BY rtime DESC) ORDER BY rtime DESC) DERIVEDTBL ORDER BY rtime ASC";


思绪比较乱,大概意思就是这样。

不说了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐