VFP 探讨之 OLE 控件(七):图表控件(上)—数据源的组织方式
图表控件可以让使用者在表单窗口上根据某个数据源绘制统计图,类似于Word和Excel那样。要使用图表控件,可在FoxPro表单的“插入对象”窗口中选择Microsoft Chart Control 6.0 SP4即可。它对应的文件是:Windows主目录下System32\mschrt20.ocx(64位系统中文件在Windows主目录下的SysWOW64文件夹中)。众所周知,绘制图表一定要有基础数据,这些基础数据以表的结构存在,类似于FoxPro中的表文件。对于FoxPro中表文件的数据,我们通常强调其设计的合理性,合理性之一就是结构的正确性,即,数据应作为字段名还是字段值的问题。比如:我们在学生成绩表中要统计一些指定课程的不及格人数,把统计结果生成一个表文件。对于这个表文件,结构一般是:年级、课号、课名、不及格人数(详见下图):
我们要生成的统计图应该是下面这样的:
因此,对于上面查询生成的表结构是不能绘制所需要的统计图的。原因有两个:(1)统计图需要清晰的数据系列(横向或纵向),而查询生成的表结构没有达到这个要求。一个有清晰数据系列的表结构应该象统计图表单上部的表格控件那样,这是很多数据库初学者喜欢的结构 ^_^;(2)对于某个年级某门课来说,没有人不及格就不生成记录,这样就会使统计图找不到某些系列而无法绘制。对于图表的数据源来说,没有数量也要有数据,这个数据就是0。
明确了这两点,就要着手编一段程序代码,把查询生成的原始结构转换成能被图表控件识别的结构。程序代码不给出了,有兴趣自己写吧,不难的。唯一的问题就是:课程名称可能很长,远远超过了自由表结构规定的5个中文字长度,而且其中还有不允许作为字段名的字符(就象本例中课名里含有小括号)。我解决的方法是利用课号。课号只有6位,没有达到自由表结构规定的10位。虽然课号以数字开头,不能直接作为字段名,只要在前面加一个字母就完全可以了。表文件结构解决了,但表格控件上的标题却需要显示课名(为了更直观体现对应的课程)。我解决的办法是,从JXAP.DBF表中按表文件字段名的后6位(课号)查找对应课程名称,然后把表格控件每一列标题的Caption属性设置成各自对应的课程名称。JXAP.DBF中存放着课号与课名的对应关系。