本文主要是介绍找控件就像找爱人:小评几个可用于显示交叉表数据的控件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
版权声明:可以任意转载,转载时请务必以超链接形式标明如下文章原始出处和作者信息及本声明
作者:xixi
出处:http://blog.csdn.net/slowgrace/archive/2008/10/02/3009557.aspx
所谓交叉表是一种常用的分类汇总表格。使用交叉表查询,显示源于表中某个字段的汇总值,并将它们分组,其中一组列在数据表的左侧,另一组列在数据表的上部。行和列的交叉处可以对数据进行多种汇总计算,如:求和、平均值、记数、最大值、最小值等。
比如我现在要做的这种一周食谱这样的交叉表。
在数据库里其实是基于下面这样的表:
其中bytMealtype字段和lngrecipeid字段其实都不是文本型字段,但是因为设置为组合框,所以ACCESS自动把这些数字对应的文本显示出来了。在第一张图显示的交叉表中,bytmealtype字段被用作行标题、也就是行字段;dateMeal字段被用作列标题,也就是列字段;lngrecipeid则是值字段,可以看到主要内容是被值字段的值表示的,有时值字段也叫明细字段。
具体到我们现在要处理的问题,对这个交叉表显示的要求如下:
1. 显示:能方便地从数据库的表中获得数据并显示出来。这是最基本的要求。
2. 定位:能方便地定位单元格。
3. 配色:能方便地设置单元格的颜色。这是为了方便用户编制、分析每周食谱。
4. 明细:能展示多于1个的明细数据。这一点是因为每个菜谱既有ID也有NAME,显示ID对用户不友好;显示NAME在保存数据时可能会导致混乱,因为NAME可能是不唯一的。
5. 删改:能删改显示的数据,以便用户边调整边看结果。
6. 保存:能把改过的数据,方便的存回数据库。以便以后调阅。
可以选择的控件很多,我试了下面几个:
(1)基于交叉表查询的自动窗体:这是最简单的显示交叉表数据的办法。在ACCESS中用可视化工具设计一个交叉表查询,然后基于这个查询自动生成窗体。
Me.txtRow = Me.交叉表查询自动窗体.Form.bytMealType
Me.txtCol = Me.交叉表查询自动窗体.Form.ActiveControl.Name
- Dim FCs As Access.FormatConditions
- Set FCs = Me.交叉表查询自动窗体.Form.Ctl2008_9_25.FormatConditions
- FCs(0).BackColor = RGB(255, 255, 0)
- FCs(0).Modify Type:=acExpression, Expression1:= “SetYellowOrNot([cbo5])”
- Set FCs = Nothing
(2)比较容易想到的办法是用pivottable控件。
(3)另外还可以用datagrid控件。这个的用法,其实是把交叉表查询生成的记录集作为它的数据源来做显示。它的缺点是不能设置单个单元格颜色;不能显示多于一个的细节。所以,放弃。
另外我还看了下其他data bound的控件。主要是看了datarepeater, datacombo。本想试试,但在VBA里好像用不了,折腾许久也不行。看了些资料,datarepeater大约是像ACCESS连续窗体的效果,是其他控件的容器,同时自己又是数据绑定的;datacombo基本上就是我用惯了的combo,只不过好像不用编程就可以设置它的列表啥的,可以绑定字段好像。我感觉这两个控件结合在一起能满足我的需要。只可惜它们属于VB power packs,我下载了却装不上,貌似必须先装了VB才行,光拷OCX和注册不灵。另外,我觉得这个和第一种方案的工作量和实质都基本一致,就不继续朝这个方向努力了。
(4)spreadsheet控件。这个基本上就是把excel嵌进来。本文的第一张图就是用spreadsheet控件做的。
(5)再有listview控件。用它的report view模式。这个我不是很满意,比较早的否了。因为它一选就是选一行,不支持单元格的点选。
这么折腾下来,其实我可以用的只有自动窗体和spreadsheet两种选择。我比较倾向于用自动窗体,因为感觉工作量稍小点。试这些控件花了2天多,还可以无穷尽的try下去,比如flexgrid控件、crystalreport、各种扩展的datagrid和pivottable等,但我决定打住了。这找控件就像买东西。你是选择把所有货物都穷尽以便找到最好的那一个,还是在满足你的性价比要求下找到一个就下单?估计一般人想也不想会说选后者。问题是,很多时候我们不太明白自己的底线,也就是自己的性价比要求。比如,我选这个控件,一开始我并没有太清楚我有哪些必须完成的需求,比如设置颜色的需求、比如对明细数据的需求等等。
或者不如说,找控件就像找爱人。在你年轻的时候你并不知道你需要什么样的伴,你既不明确知道当前自己的需求、更无从知道未来的你的需求,而且你也无从判断你将要相伴一生的这个人性价比如何,你只能根据不靠谱的爱情感觉或者其他一些什么因素圈定一个,从此踏上充满风险的婚姻之旅。这以后如果发现这个控件不能满足你的需求,你只能见招拆招,能将就着用就用吧,实在绕不过去,那只好壮士断腕,从头来过。
唉。这么一说,还有点凄凉了。控件真是不靠谱的东西,标准的、简单的、人所共知的控件还行;稍复杂点的,即使是微软出品的,它的性能、它的易用性、它的不出错率你就别寄予太高期望了。(而且,该死的微软,它们挣了那么多钱,就不能花九牛一毛的钱雇个人好好地写一份言简意赅的控件说明书么?)很多时候,你也许会发现你最初因为采用了控件而省出的编代码的时间,远远抵不过你跟这该死的控件较劲的时间。这和人类社会又很像了,你能控制的、完全依靠的永远都只有你自己。
在用别人的控件和自己动手这两者中选择哪个,是个难题。实在没时间调研明白的时候,咱扔硬币吧。不管怎样,我得记住,别穷尽!
另外,也有点明白了在ACCESS里用VBA和直接用VB6的区别,那就是微软针对ACCESS的常见需要提供了许多方便,省去了编程的麻烦,许多功能不需要太多的代码就可以实现了。比如,自动窗体。比如,我一行代码没编就得到的复合框……所以,我想以后能用ACCESS自己提供的功能就少用外边的。针对相同的功能,我猜ACCESS自己提供的八成还是比外边的好用。
注:以上讨论只是本人基于浅显经验的粗浅认识,结论未必正确,仅供参考。
参考文献:http://msdn.microsoft.com/zh-cn/library/bx2998ay(VS.71).aspx
这篇关于找控件就像找爱人:小评几个可用于显示交叉表数据的控件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!