本文源码下载:
http://d.download.csdn.net/down/3182624/zxhx
导读:本文是VC++ Datagrid应用实例详解系列的第三讲 - 增删查改,总的来说功能比较完善了,代码优化后抽空再放上来。
本文的feature:
1) 使用datagrid组件实现基本的数据库(本文用的是access)操作:增删查改;
2) 模态子对话框的设计;
3) 修改记录的关键点:获取datagrid中当前记录的游标;
4) 从DataGrid控件中读出日期并填入子对话框的Date Time Picker控件中的关键点:CString类型转换为CTime类型的方法。
1、 数据库连接:在前文已有阐述,故不再赘述。
2、 结果集定义,为了获取和控制游标,这里使用了结果集指针:
代码如下:
主对话框初始化主要是对datagrid控件初始化,关键代码如下:
这里的异常捕获的描述采用了下面文章的内容:
http://blog.csdn.net/zyq5945/archive/2010/04/29/5541280.aspx
好处是异常定位和描述更清晰。
代码如下:
3、 查询按钮事件:OnBtQuery()
与本系列(2)中类同,数据源按datagrid设置即可,设完后需要刷新datagrid控件数据,重新设置列宽等数据。
4、 显示所有数据按钮:OnBtShowAll()
这里调用主对话框初始化函数即可: CDataGridTestDlg::OnInitDialog()。
5、 增加记录按钮:OnBtAddNew()
主要是定义模态子对话框:IDD_OPERATE。
放好文本框(Edit Box)和文本标签(Static Text),以及一个Date Time Picker控件,给文本框和Date Time Picker控件设置控件变量。
注意,这里的Date Time Picker控件变量可以设置为CTime的值类型,也可以设置为CDateTimeCtrl类型,区别是前者只能手动输入日期,后者可以通过日历控件选择日期,这里采用的是第一种方式。
另外,子对话框对应的类和实现文件中自动生成的注释要小心,不能随意删除,我这里也是因为删除注释导致”…Cannot find the insert section ‘AFX_DATA_MAP’…”和”…Cannot find the insert section ‘AFX_MSG_MAP’…”的错误,解决方法:把注释补充完整,删除.clw文件并重建该文件。
添加记录的主要代码:
这里注意需要把CTime类型的日期转换为CString类型的日期strDate,本系列(2)中已有介绍。
6、 删除记录按钮:OnBtDelete()
注意处理一下记录为空的情况:
添加的代码如下:
7、 修改记录按钮:OnBtModify()
关键点:
(1)获取当前行的游标:
上面的语句含义是获取当前游标的行号,从0开始。
若行号为负,则表示记录为空:
(2)定位到当前记录:
(3)读取当前行的记录到子对话框中:
读取到文本框比较简单,读取到Date Time Picker控件麻烦一点,需要一系列的转换:
后面的写数据相对就简单多了,有兴趣的可以对照代码看一下。
截图就不发了,想看的直接看源文件吧。