找控件就像找爱人:小评几个可用于显示交叉表数据的控件

2024-01-09 15:32

本文主要是介绍找控件就像找爱人:小评几个可用于显示交叉表数据的控件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

版权声明:可以任意转载,转载时请务必以超链接形式标明如下文章原始出处和作者信息及本声明

作者: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中用可视化工具设计一个交叉表查询,然后基于这个查询自动生成窗体。

    a)显示:基本是比较简单的。不过生产自动窗体之后,还要写一些代码以便在在程序运行期间根据用户的选择动态更改列标题(改为当前选定时间区间内的相应日期)。

    b)定位:行就是当前记录的mealtype值;列就是当前获得焦点的控件的name。

        Me.txtRow = Me.交叉表查询自动窗体.Form.bytMealType
        Me.txtCol = Me.交叉表查询自动窗体.Form.ActiveControl.Name

    c)配色:这个比较麻烦。设置一列的颜色比较简单,就是把那列对应的combo控件的背景色改掉就行。设置某个单元格的颜色比较麻烦,好在我也不是要求设置任意单元格的颜色,只是要把菜谱资料不齐的单元格变色,所以可以用各combobox的formatcondions写:

  1.     Dim FCs As Access.FormatConditions
  2.     Set FCs = Me.交叉表查询自动窗体.Form.Ctl2008_9_25.FormatConditions
  3.    
  4.     FCs(0).BackColor = RGB(255, 255, 0)
  5.     FCs(0).Modify Type:=acExpression, Expression1:= “SetYellowOrNot([cbo5])”
  6.     Set FCs = Nothing

    d)明细:方便。只要手工把这几个combo控件的行来源设置为基于tblrecipe的查询就行了

    e)删改:不允许改。可以代码改之后让窗体requery,还比较快。

    f)保存:得自己写代码。

 (2)比较容易想到的办法是用pivottable控件

    a)显示:只要在程序里设置好列字段、行字段和值字段就可以了。

    b)定位:支持。

    c)配色:不支持。很郁闷。貌似它只能按字段设置颜色。

    d)明细:可以显示多个字段。也可以直接得到和一个字段相关的其他字段(即使不显示)。这一点比较吸引我。因为我需要显示的只是菜名,但需要得到的相关数据却比较多,这样写代码时可以省些事。

    e)删改:不允许改。可以先在后台该了,然后刷新显示,还算简单。

    f)保存:得自己写代码。

   小结:它的致命伤是无法设置单个单元格的颜色,没有变通办法。 

 

(3)另外还可以用datagrid控件。这个的用法,其实是把交叉表查询生成的记录集作为它的数据源来做显示。它的缺点是不能设置单个单元格颜色;不能显示多于一个的细节。所以,放弃。

 

另外我还看了下其他data bound的控件。主要是看了datarepeater, datacombo。本想试试,但在VBA里好像用不了,折腾许久也不行。看了些资料,datarepeater大约是像ACCESS连续窗体的效果,是其他控件的容器,同时自己又是数据绑定的;datacombo基本上就是我用惯了的combo,只不过好像不用编程就可以设置它的列表啥的,可以绑定字段好像。我感觉这两个控件结合在一起能满足我的需要。只可惜它们属于VB power packs,我下载了却装不上,貌似必须先装了VB才行,光拷OCX和注册不灵。另外,我觉得这个和第一种方案的工作量和实质都基本一致,就不继续朝这个方向努力了。 

(4)spreadsheet控件。这个基本上就是把excel嵌进来。本文的第一张图就是用spreadsheet控件做的。

    a)显示:数据需要自己从DB中逐条读出来显示。

    b)定位:可以方便地定位单元格。

    c)配色:可以方便地设置单元格的颜色。

    d)明细:只能显示1个明细。变通的办法有两个,1个是把两个细节合在一起并在一个单元格里显示;一个是做两个worksheet,相应的细节单元格,一个显示ID,一个显示name。

    e)删改:可以删改。

    f)保存:需要自己写代码存盘。 

(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

这篇关于找控件就像找爱人:小评几个可用于显示交叉表数据的控件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/587592

相关文章

Qt中QGroupBox控件的实现

《Qt中QGroupBox控件的实现》QGroupBox是Qt框架中一个非常有用的控件,它主要用于组织和管理一组相关的控件,本文主要介绍了Qt中QGroupBox控件的实现,具有一定的参考价值,感兴趣... 目录引言一、基本属性二、常用方法2.1 构造函数 2.2 设置标题2.3 设置复选框模式2.4 是否

Qt中QUndoView控件的具体使用

《Qt中QUndoView控件的具体使用》QUndoView是Qt框架中用于可视化显示QUndoStack内容的控件,本文主要介绍了Qt中QUndoView控件的具体使用,具有一定的参考价值,感兴趣的... 目录引言一、QUndoView 的用途二、工作原理三、 如何与 QUnDOStack 配合使用四、自

SpringBoot集成Milvus实现数据增删改查功能

《SpringBoot集成Milvus实现数据增删改查功能》milvus支持的语言比较多,支持python,Java,Go,node等开发语言,本文主要介绍如何使用Java语言,采用springboo... 目录1、Milvus基本概念2、添加maven依赖3、配置yml文件4、创建MilvusClient

SpringValidation数据校验之约束注解与分组校验方式

《SpringValidation数据校验之约束注解与分组校验方式》本文将深入探讨SpringValidation的核心功能,帮助开发者掌握约束注解的使用技巧和分组校验的高级应用,从而构建更加健壮和可... 目录引言一、Spring Validation基础架构1.1 jsR-380标准与Spring整合1

MySQL 中查询 VARCHAR 类型 JSON 数据的问题记录

《MySQL中查询VARCHAR类型JSON数据的问题记录》在数据库设计中,有时我们会将JSON数据存储在VARCHAR或TEXT类型字段中,本文将详细介绍如何在MySQL中有效查询存储为V... 目录一、问题背景二、mysql jsON 函数2.1 常用 JSON 函数三、查询示例3.1 基本查询3.2

SpringBatch数据写入实现

《SpringBatch数据写入实现》SpringBatch通过ItemWriter接口及其丰富的实现,提供了强大的数据写入能力,本文主要介绍了SpringBatch数据写入实现,具有一定的参考价值,... 目录python引言一、ItemWriter核心概念二、数据库写入实现三、文件写入实现四、多目标写入

使用Python将JSON,XML和YAML数据写入Excel文件

《使用Python将JSON,XML和YAML数据写入Excel文件》JSON、XML和YAML作为主流结构化数据格式,因其层次化表达能力和跨平台兼容性,已成为系统间数据交换的通用载体,本文将介绍如何... 目录如何使用python写入数据到Excel工作表用Python导入jsON数据到Excel工作表用

MySQL中的交叉连接、自然连接和内连接查询详解

《MySQL中的交叉连接、自然连接和内连接查询详解》:本文主要介绍MySQL中的交叉连接、自然连接和内连接查询,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、引入二、交php叉连接(cross join)三、自然连接(naturalandroid join)四

Mysql如何将数据按照年月分组的统计

《Mysql如何将数据按照年月分组的统计》:本文主要介绍Mysql如何将数据按照年月分组的统计方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql将数据按照年月分组的统计要的效果方案总结Mysql将数据按照年月分组的统计要的效果方案① 使用 DA

鸿蒙中Axios数据请求的封装和配置方法

《鸿蒙中Axios数据请求的封装和配置方法》:本文主要介绍鸿蒙中Axios数据请求的封装和配置方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.配置权限 应用级权限和系统级权限2.配置网络请求的代码3.下载在Entry中 下载AxIOS4.封装Htt