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

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

相关文章

Java注解之超越Javadoc的元数据利器详解

《Java注解之超越Javadoc的元数据利器详解》本文将深入探讨Java注解的定义、类型、内置注解、自定义注解、保留策略、实际应用场景及最佳实践,无论是初学者还是资深开发者,都能通过本文了解如何利用... 目录什么是注解?注解的类型内置注编程解自定义注解注解的保留策略实际用例最佳实践总结在 Java 编程

电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案

《电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案》最近有不少兄弟反映,电脑突然弹出“mfc100u.dll已加载,但找不到入口点”的错误提示,导致一些程序无法正... 在计算机使用过程中,我们经常会遇到一些错误提示,其中最常见的就是“找不到指定的模块”或“缺少某个DL

一文教你Python如何快速精准抓取网页数据

《一文教你Python如何快速精准抓取网页数据》这篇文章主要为大家详细介绍了如何利用Python实现快速精准抓取网页数据,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录1. 准备工作2. 基础爬虫实现3. 高级功能扩展3.1 抓取文章详情3.2 保存数据到文件4. 完整示例

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格

python处理带有时区的日期和时间数据

《python处理带有时区的日期和时间数据》这篇文章主要为大家详细介绍了如何在Python中使用pytz库处理时区信息,包括获取当前UTC时间,转换为特定时区等,有需要的小伙伴可以参考一下... 目录时区基本信息python datetime使用timezonepandas处理时区数据知识延展时区基本信息

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

SpringMVC 通过ajax 前后端数据交互的实现方法

《SpringMVC通过ajax前后端数据交互的实现方法》:本文主要介绍SpringMVC通过ajax前后端数据交互的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价... 在前端的开发过程中,经常在html页面通过AJAX进行前后端数据的交互,SpringMVC的controll

Pandas统计每行数据中的空值的方法示例

《Pandas统计每行数据中的空值的方法示例》处理缺失数据(NaN值)是一个非常常见的问题,本文主要介绍了Pandas统计每行数据中的空值的方法示例,具有一定的参考价值,感兴趣的可以了解一下... 目录什么是空值?为什么要统计空值?准备工作创建示例数据统计每行空值数量进一步分析www.chinasem.cn处

如何使用 Python 读取 Excel 数据

《如何使用Python读取Excel数据》:本文主要介绍使用Python读取Excel数据的详细教程,通过pandas和openpyxl,你可以轻松读取Excel文件,并进行各种数据处理操... 目录使用 python 读取 Excel 数据的详细教程1. 安装必要的依赖2. 读取 Excel 文件3. 读

Spring 请求之传递 JSON 数据的操作方法

《Spring请求之传递JSON数据的操作方法》JSON就是一种数据格式,有自己的格式和语法,使用文本表示一个对象或数组的信息,因此JSON本质是字符串,主要负责在不同的语言中数据传递和交换,这... 目录jsON 概念JSON 语法JSON 的语法JSON 的两种结构JSON 字符串和 Java 对象互转