首页 理论教育 使用DataGrid控件单文档程序

使用DataGrid控件单文档程序

时间:2023-11-16 理论教育 版权反馈
【摘要】:本小节介绍Microsoft DataGrid Control 6.0控件的使用。图2-12DataGrid控件使用演示程序——简单的通讯簿读者可以按以下的步骤实现此应用程序。表2-3微软DataGrid控件的相关类使用DataGrid控件。下面的代码给出了使用DataGrid控件方法设置该控件的数据源属性的示例。首先,要做一些准备工作:使用ADO作为DataGrid控件的数据源来管理一个简单的Access文件。本例程序有这样一个功能,当鼠标单击DataGrid控件的列头时,要对此列数据进行排序并显示排序的结果。

使用DataGrid控件单文档程序

小节介绍Microsoft DataGrid Control 6.0控件的使用。该控件的容器是基于单文档框架的应用程序,实现了简单的通讯簿管理功能(主界面如图2-12所示)。

图2-12 DataGrid控件使用演示程序——简单的通讯簿

读者可以按以下的步骤实现此应用程序。

(1)建立ActiveX控件容器应用程序框架,添加控件到框架中(具体方法参见上例)。

使用AppWizard向导建立单文档项目DGCT(DataGrid Control Test),注意向导第二步选中对ActiveX控件的支持。建好项目后添加Microsoft DataGrid Control 6.0(OLEDB)控件到项目中,随之在该控件中的10个相关的支持类会出现在ClassView窗口中。这10个相关类的具体作用列举于表2-3。

表2-3 微软DataGrid控件的相关类

(2)使用DataGrid控件。

ActiveX控件的使用无非就是设置控件的属性,使用控件的方法和对控件进行事件映射三个方面,而对这三个方面的操作要通过控件的支持类来进行,因此使用控件就是使用控件的相关支持类。

① 控件方法的使用。

实现该通讯簿程序的第一步是在单文档程序界面的客户区中加入控件窗口,并使之充满客户区。因为DataGrid控件作为窗口元素的主要承担类是CDataGrid,所以首先要在CDGCTView类中添加变量,如程序清单2-4所示。

程序清单2-4 在CDGCTView.h类中添加控件类变量

接着使用ClassWizard为CDGCTView类添加和编辑WM_CREATE消息的响应函数。在响应函数中创建DataGrid控件(子窗口),并指定其ID是IDC_DATAGRID(在Resource.h头文件中添加ID),具体代码如程序清单2-5所示。

程序清单2-5 CDGCTView::OnCreate函数

上面OnCreate函数中就是使用了控件的方法Create,下面接着使用CDataGrid类从CWnd类继承过来的方法MoveWindow,令控件充满客户区(处理WM_SIZE消息),代码见程序清单2-6。

程序清单2-6 CDGCTView::OnSize函数

② 控件属性的设置。

如果一个控件在对话框模板中使用,该控件的属性可以通过属性对话框来设置(如第一个例子),但这种属性设置是在程序编辑期间发生的,而在程序运行时,控件的属性要通过控件提供的方法来设置或读取。一般来说,用来访问属性的方法是以Set和Get为开头的函数。

下面的代码给出了使用DataGrid控件方法设置该控件的数据源属性的示例。

首先,要做一些准备工作:使用ADO作为DataGrid控件的数据源来管理一个简单的Access文件。下面三个步骤就是准备工作的具体展开。(注:这里使用了一点数据库的知识,读者可不作深入研究,在本书后面的数据库知识中还要详细介绍,本例的学习重点应放在DataGrid控件的使用上面)

第一步,使用Access建立一个数据库文件note.mdb,含有一个表info,如图2-13所示。这里需要注意的是:要把数据库note.mdb建到或者拷贝到DGCT文件夹下。

图2-13 Access表info(其中各个字段都是文本类型)

第二步,引入ADO,在这里ADO是DataGrid控件与数据库文件的桥梁。ADO是微软公司提供的一个数据管理组件,其全称是ActiveX数据对象(ActiveX Data Object),它与DataGrid控件统称为组件,只不过ADO没有界面。

具体作法是在项目的StdAfx.h文件中添加下面灰背景黑体的代码(程序清单2-7),其作用是引入ADO——#import指令是使用组件的一种方式,在数据库一章还要详细介绍。

程序清单2-7 在StdAfx.h文件中引入ADO组件

第三步,使用ADO管理数据库文件note.mdb和表info。下面是完成此任务的代码,其中语句前面或后面的“//”注释是说明该语句的作用,读者在跟随我们在VC下实现该应用程序时可以不录入到代码中。

在CDGCTView类中添加两个变量(它们的类型是指针类型,由ADO提供),如程序清单2-8所示:(www.xing528.com)

程序清单2-8 在CDGCTView类中添加两个指针变量

准备工作做完之后,要在OnInitialUpdate函数中为各个指针创建实例(对象),并把各个指针连接到数据库和表。然后,再使用DataGrid控件的SetRefDataSource方法把该控件和ADO的对象联系起来,具体代码见程序清单2-9。

程序清单2-9 CDGCTView::OnInitialUpdate函数

最后, ADO相关对象使用完毕后要撤销(释放所占内存)而且组件库也要卸载,这些工作可以在CDGCTView类的OnDestroy函数中完成(如程序清单2-10所示)。

程序清单2-10 CDGCTView::OnDestroy函数

③ 控件事件的映射。

本例程序有这样一个功能,当鼠标单击DataGrid控件的列头时,要对此列数据进行排序并显示排序的结果。要实现该功能,就要求控件响应鼠标单击事件,并在响应函数中完成排序,即事件映射。在对话框模板中使用ActiveX控件时,对控件进行事件映射很简单,使用ClassWizard就可以完成(参见第一个例子的事件映射部分),但是在这个单文档应用程序中,要手工添加在对话框程序中ClassWizard帮助我们完成的那部分代码。和使用ClassWizard比较起来,尽管手工添加代码的方式要麻烦一些,可是这种方式更加通用。下面,分步骤进行控件事件映射。

第一步,在CDGCTView类中声明事件映射——添加一个宏,然后再在该类中添加事件的响应函数OnHeadClickDatagrid的声明(如程序清单2-11所示)。

程序清单2-11 在CView类中添加事件映射宏及响应函数声明

第二步,在CDGCTView类的实现文件末尾(DGCTView.cpp)添加事件映射表,并实现事件响应函数(如程序清单2-12所示)。

程序清单2-12 在DGCTView.cpp中添加事件映射表及响应函数的实现

以上两步就是控件对于事件HeadClick的映射处理,DataGrid控件能够响应三十余种事件,对于一般的功能实现,这些事件足够开发者使用了。

从上面可以看出,ActiveX控件的使用集中于设置属性、使用方法、事件映射以及三方面的综合。读者可以从本例出发,举一反三,继续扩展这个通讯簿程序,使其具有更多的功能。

(3)综合运用。

通讯簿程序还有许多其它的功能,如添加行和列、设置列宽度等,要实现这些功能,无非就是综合使用DataGrid控件的属性、方法和事件,下面我们就再为本程序添加三个功能:添加行、添加列、设置列宽度。

首先,在ResourceView中双击Menu的IDR_MAINFRAME,打开菜单资源编辑器并编辑该菜单,如图2-14所示。其中,新添加的“表格”菜单项下有三个子菜单项,它们的名称、ID和功能说明如表2-4所示。

图2-14 编辑菜单资源

表2-4 新增菜单项的名称、ID和说明

然后,使用ClassWizard为三个菜单项分别添加WM_COMMAND命令(特殊的Windows消息)的处理函数OnTableInsertColumn、OnTableAppendRow和OnTableAdjustWidth。最后,编辑三个命令处理函数,它们的代码如程序清单2-13所示。

程序清单2-13 三个菜单命令的消息处理函数

关于DataGrid控件其它的属性、方法和事件的使用方法,在微软的开发者帮助文档(Microsoft Developer Network——MSDN)中有详细的说明,读者可以根据MSDN中的帮助说明和本书所带光盘中本章及第四章的实例,进一步完善这个通讯簿应用程序。由于篇幅所限,这里就不一一列举更多的功能代码了。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈