今天心情不错
经过周末两天时间的不懈努力,工作终于有了迅速的进展,总的工作就剩下地下水等值曲线&等值面的绘制了.没想到经过两天努力把图表功能给完成了,效果看起来还不错,比较高兴.
这两天主要解决了以下几个难点:
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用类的思想设计框架的话,也能够使效率大大提高,更为关键的是灵活性强,而且也使代码更为简洁,这样就不用成天想着怎么去拷贝代码了.


