今天心情不错

作者: 天涯无情 @ 11/12 2006, 10:52

  经过周末两天时间的不懈努力,工作终于有了迅速的进展,总的工作就剩下地下水等值曲线&等值面的绘制了.没想到经过两天努力把图表功能给完成了,效果看起来还不错,比较高兴.

这两天主要解决了以下几个难点:

1.图表控件的选择,最终使用了mschart,发现它的功能还是比较强大的,之前太小瞧它了.通过一系列属性设置同样能够让你的图表美观起来.如标签名,网格间隙都是可以在代码里控制的.

2.mschart的datasource属性只能为一个记录集,因此要画多条曲线的画,在记录集里就应该有多列.我的表只有时间,编码,地下水水位四个字段,而我要实现在某个时段内不同编码的站点的对比图.经过一段时间的考虑,我使用交叉表解决了这个问题,在sqlServer中使用交叉表的方法可查下更详细的资料,举个例子:

SELECT TitleOfCourtesy,
  SUM(CASE City WHEN 'London' THEN ReportsTo ELSE NULL END) AS [London City],
 SUM(CASE City WHEN 'Redmond' THEN ReportsTo ELSE NULL END) AS [Redmond City],
 SUM(CASE City WHEN 'Seattle' THEN ReportsTo ELSE NULL END) AS [Seattle City]
FROM Employees GROUP BY TitleOfCourtesy

同时你还可以结合嵌套查询,联合查询等其它条件,我写的一个简单的语句如下,

select substring(CONVERT(varchar(10), YMDHM, 111),3,10) as ymdhm, sum(case STCD when '" & staCode(0) & "' then " & strFieldN & " else 0 end) as [" & staCode(0) & "] from " & strTableN & " where stcd in (" & staCode(0) & ") and  ymdhm >= '" & strStartTime & "' and ymdhm <= '" & strEndTime & "' group by ymdhm order by ymdhm asc".

3.mschart还支持数据源为数组类型,这次为了做多个年份,同一个站点的水位对比分析,就使用了这种方法.其中需要用到多个循环,所以执行效率可能低一点.

4.突然间发现vb用类的思想设计框架的话,也能够使效率大大提高,更为关键的是灵活性强,而且也使代码更为简洁,这样就不用成天想着怎么去拷贝代码了.


常见的几种图表控件

作者: 天涯无情 @ 11/11 2006, 16:41

  今天为了在vb中读取sqlserver的数据动态绘制图表,如折线图,饼状图等,差不多花了一天的时间在百度里,没想到现在还是要回归到起点,决定还是采用微软的mschart控件.如此,主要基于几点:1.该控件读取数据方便,可以接收recordset记录集.2.原本发现它界面很丑,可是通过设置它的属性,还是能够修饰得漂亮一点得.3.其它控件不是装不上就是无法满足我得要求.

  当然还有其它几种好用的控件,如:

1.formula one & formula impression.该控件能够实现excel的类似功能,同时也能做出很多类型的图表,因此,而且能够直接内嵌到程序中,因此如果对报表之类要求比较高的话,不妨试试,性价比很高哦.原本打算在这个项目中采用6.0版本的,以便&另外一个系统统一起来,可是我的系统是xp,竟然装不上.不过它的安装说明确实说了只能在win95,win98,winNT4.0里使用.但奇怪的是xp系统里竟然能安装上6.1版本的.

这里提供一个下载地址,有英文版的,还有中文破解.

http://www.pdriver.com/display.asp?key_id=886

2.微软的excel控件,在vb中加载excel库引用就可以.但是数据&图标都是在excel里创建.如果想将图表直接在form里显示的话,可以先将excel的图标存成图片格式,然后再加载到程序的界面中.

3.微软的office web component.里面有chartspace,chartsheet.一个用于绘图,一个则与excel的功能类似,同时如果不是动态绘图的话,chartspace支持直接鼠标操作,即能够实现数据以图表的形式显示出来.



«上一页   1 2

  © 感知世界,感知未来, All rights reserved.