设为首页 加入收藏

TOP

21.4.4 创建记录集视图(1)
2013-10-07 12:43:41 来源: 作者: 【 】 浏览:70
Tags:21.4.4 创建 记录

21.4.4  创建记录集视图(1)

现在可以创建与新对话框连接的记录集视图类,因此给该项目添加.h文件和.cpp文件,以容纳即将定义的新类CCustomerView和CProductView的代码,使用Solution Explorer实现该操作。CCustomerView类封装了CCustomerSet记录集的视图,并使用了IDD_CUSTOMER_FORM对话框资源。最初的类定义因此如下所示:

  1. // CustomerView.h : header file  
  2.  
  3. #pragma once  
  4.  
  5. class CCustomerSet;  
  6.  
  7. class CCustomerView : public CRecordView  
  8. {  
  9. public:  
  10. CCustomerView();  
  11. virtual ~CCustomerView();  
  12.  
  13. public:  
  14. enum { IDD = IDD_CUSTOMER_FORM };// Form Data  
  15. CCustomerSet* m_pSet;  
  16.  
  17. // Operations  
  18. public:  
  19. CCustomerSet* GetRecordset();  
  20.  
  21. #ifdef _DEBUG  
  22. virtual void AssertValid() const;  
  23. virtual void Dump(CDumpContext& dc) const;  
  24. #endif  
  25.  
  26. }; 

在CustomerView.cpp文件中,可以在构造函数中初始化将存储记录集对象指针的m_pSet成员:

  1. #include "stdafx.h"  
  2. #include "DBSimpleUpdate.h" // Main header file for the application  
  3. #include "CustomerView.h"  
  4.  
  5. // Constructor  
  6. CCustomerView::CCustomerView()  
  7. : CRecordView(CCustomerView::IDD),  
  8. m_pSet(NULL)  
  9. {  

另外,此构造函数通过将对话框窗体的ID传递给基类的构造函数,使IDD_CUSTOMER_FORM成为该视图的对话框。在嵌入CustomerView.h头文件的#include指令之前需要有嵌入DBSimpleUpdate.h的#include指令,不然编译过程中将不能识别IDD_CUSTOMER_FORM符号。DBSimpleUpdate.h文件中有一条嵌入Resource.h的#include指令,而Resource.h文件中定义了已创建资源的ID。

现在,在CustomerView.cpp文件中添加那些将在调试模式中生成的函数的定义:

  1. // CCustomerView diagnostics  
  2.  
  3. #ifdef _DEBUG  
  4. void CCustomerView::AssertValid() const  
  5. {  
  6. CRecordView::AssertValid();  
  7. }  
  8.  
  9. void CCustomerView::Dump(CDumpContext& dc) const  
  10. {  
  11. CRecordView::Dump(dc);  
  12. }  
  13. #endif //_DEBUG 

可能不会需要这些函数,但定义它们没什么坏处;万一发生故障时,它们将派上用场。

现在,可以重写从基类继承的DoDataExchange()、OnGetRecordset()和OnInitialUpdate()函数。该示例将展示为了使这些函数以需要的方式处理记录集,应该如何对它们进行定制。在Class View中右击CCustomerView类名,并从弹出菜单中选择Properties。单击重写工具栏按钮(如果不记得是哪个按钮,可以等待屏幕上显示按钮的工具提示),并在左列中选择要重写的函数名,然后在右边单元格中选择<Add>选项以添加函数。

我们即刻就能完成OnGetRecordset()重写函数的实现:

  1. CRecordset* CCustomerView::OnGetRecordset()  
  2. {  
  3. if(m_pSet == NULL) // If we don't have the recordset address  
  4. {  
  5. m_pSet = new CCustomerSet(NULL); // create a new one  
  6. m_pSet->Open(); // and open it  
  7. }  
  8. return m_pSet; // Return the recordset address  

如果m_pSet是NULL,就创建一个记录集,并将其打开,然后返回它的地址。如果m_pSet不是NULL,则表明已经有被创建的记录集,因此返回m_pSet包含的地址。必须给.cpp文件添加一条嵌入CCustomerSet.h的#include指令,因为这里要引用CCustomerSet类名。

现在,可以实现使用OnGetRecordset()函数的GetRecordset()函数:

  1. CCustomerSet* CCustomerView::GetRecordset()  
  2. {  
  3. return static_cast<CCustomerSet*>(OnGetRecordset());  

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇21.4.4 创建记录集视图(2) 下一篇21.4 向表中添加行

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: