CRecordView 类
显示控件中数据库记录的视图。
语法
class AFX_NOVTABLE CRecordView : public CFormView
成员
受保护构造函数
名称 | 描述 |
---|---|
CRecordView::CRecordView | 构造 CRecordView 对象。 |
公共方法
名称 | 描述 |
---|---|
CRecordView::IsOnFirstRecord | 如果当前记录是关联记录集中的第一条记录,则返回非零值。 |
CRecordView::IsOnLastRecord | 如果当前记录是关联记录集中的最后一条记录,则返回非零值。 |
CRecordView::OnGetRecordset | 返回指向派生自 CRecordset 的类的对象的指针。 ClassWizard 将为你重写此函数并在必要时创建记录集。 |
CRecordView::OnMove |
受保护方法
名称 | 描述 |
---|---|
CRecordView::OnMove | 如果当前记录已更改,则在数据源上更新该记录,然后转到指定的记录(下一个、上一个、第一个或最后一个)。 |
备注
该视图是直接连接到 CRecordset
对象的窗体视图。 该视图是从对话模板资源创建的,并在对话模板的控件中显示 CRecordset
对象的字段。 CRecordView
对象使用对话框数据交换 (DDX) 和记录字段交换 (RFX) 自动在窗体上的控件与记录集的字段之间移动数据。 CRecordView
还提供了用于移动到第一条、下一条、上一条或最后一条记录的默认实现,以及用于更新当前查看的记录的接口。
注意
如果使用数据访问对象 (DAO) 类而不是开放式数据库连接 (ODBC) 类,请改用 CDaoRecordView 类。 有关详细信息,请参阅文章概述:数据库编程。
创建记录视图的最常用方式是使用应用程序向导。 应用程序向导会创建记录视图类及其关联的记录集类作为骨干初学者应用程序的一部分。 如果你不使用应用程序向导创建记录视图类,可以稍后使用 ClassWizard 创建该类。 如果你只需要一个窗体,则使用应用程序向导方法会更方便。 ClassWizard 允许在开发过程的后期使用记录视图。 使用 ClassWizard 单独创建记录视图和记录集再将其连接起来是最灵活的方法,因为这样可以更好地控制记录集类及其 .H/.CPP 文件的命名。 使用这种方法还可以针对同一个记录集类创建多个记录视图。
为了方便最终用户在记录视图中的不同记录之间切换,应用程序向导会创建菜单(和可选的工具栏)资源用于切换到第一条、下一条、上一条或最后一条记录。 如果你使用 ClassWizard 创建记录视图类,则需要使用菜单和位图编辑器自行创建这些资源。
有关用于在不同记录之间切换的默认实现的信息,请参阅 IsOnFirstRecord
和 IsOnLastRecord
,以及使用记录视图一文。
CRecordView
跟踪用户在记录集中的位置,以便记录视图可以更新用户界面。 当用户转到记录集的任一端时,记录视图会禁用用户界面对象(例如菜单项或工具栏按钮)以沿相同方向进一步转移。
有关声明和使用记录视图及记录集类的详细信息,请参阅记录视图一文中的“设计和创建记录视图”。 有关记录视图的工作原理及其用法的详细信息,请参阅使用记录视图一文。
继承层次结构
CRecordView
要求
标头:afxdb.h
CRecordView::CRecordView
创建派生自 CRecordView
的类型的对象时,请调用任一形式的构造函数来初始化视图对象并标识视图所基于的对话框资源。
explicit CRecordView(LPCTSTR lpszTemplateName);
explicit CRecordView(UINT nIDTemplate);
参数
lpszTemplateName
包含一个以 null 结尾的字符串,它是对话模板资源的名称。
nIDTemplate
包含对话模板资源的 ID 号码。
备注
可以通过名称(将字符串作为参数传递给构造函数)或资源 ID(将无符号整数作为参数传递)来标识资源。 建议使用资源 ID。
注意
派生类必须提供自己的构造函数。 在派生类的构造函数中,使用资源名称或 ID 作为参数调用构造函数 CRecordView::CRecordView
,如以下示例所示。
CRecordView::OnInitialUpdate
调用 UpdateData
,后者调用 DoDataExchange
。 对 DoDataExchange
的这种初始调用会将 CRecordView
控件(间接)连接到由 ClassWizard 创建的 CRecordset
字段数据成员。 只有在调用基类 CFormView::OnInitialUpdate
成员函数之后,才能使用这些数据成员。
注意
如果你使用 ClassWizard,则向导会定义 enum
值 CRecordView::IDD
,在类声明中指定该值,并在构造函数的成员初始化列表中使用该值。
示例
CMyRecordView::CMyRecordView()
: CRecordView(CMyRecordView::IDD)
{
m_pSet = NULL;
// TODO: add construction code here
}
CRecordView::IsOnFirstRecord
调用此成员函数可确定当前记录是否是与此记录视图关联的记录集对象中的第一条记录。
BOOL IsOnFirstRecord();
返回值
如果当前记录是记录集中的第一条记录,则返回非零值;否则返回 0。
备注
此函数对于编写你自己的、由 ClassWizard 写入的默认命令更新处理程序的实现很有用。
如果用户转到第一条记录,则框架会禁用用于转到第一条或上一条记录的任何用户界面对象。
CRecordView::IsOnLastRecord
调用此成员函数可确定当前记录是否是与此记录视图关联的记录集对象中的最后一条记录。
BOOL IsOnLastRecord();
返回值
如果当前记录是记录集中的最后一条记录,则返回非零值;否则返回 0。
备注
此函数对于编写你自己的、由 ClassWizard 写入的默认命令更新处理程序(用于支持在不同记录之间切换的用户界面)的实现非常有用。
注意
此函数的结果非常可靠,只是在用户越过记录集的末尾之前视图可能无法检测到末尾。 在记录视图可以告知它必须禁用任何用户界面对象以转到下一条或最后一条记录之前,用户必须越过最后一条记录。 如果用户越过最后一条记录,然后回到最后一条记录(或最后一条记录前面的一条记录),则记录视图可以跟踪用户在记录集中的位置并正确禁用用户界面对象。 在调用实现函数 OnRecordLast
(处理 ID_RECORD_LAST 命令)或 CRecordset::MoveLast
之后,IsOnLastRecord
也不可靠。
CRecordView::OnGetRecordset
返回指向与记录视图关联的 CRecordset
派生对象的指针。
virtual CRecordset* OnGetRecordset() = 0;
返回值
如果已成功创建对象,则返回指向 CRecordset
派生对象的指针;否则返回 NULL 指针。
备注
必须重写此成员函数才能构造或获取记录集对象,并返回指向该对象的指针。 如果使用 ClassWizard 声明记录视图类,向导会为你编写默认替代。 ClassWizard 的默认实现返回记录视图中存储的记录集指针(如果存在)。 如果没有,它会构造一个你使用 ClassWizard 指定的类型的记录集对象,并调用其 Open
成员函数来打开表或运行查询,然后返回指向该对象的指针。
有关详细信息和示例,请参阅文章记录视图:使用记录视图。
CRecordView::OnMove
调用此成员函数可以转到记录集中的另一条记录,并在记录视图的控件中显示其字段。
virtual BOOL OnMove(UINT nIDMoveCommand);
参数
nIDMoveCommand
以下标准命令 ID 值之一:
ID_RECORD_FIRST:转到记录集中的第一条记录。
ID_RECORD_LAST:转到记录集中的最后一条记录。
ID_RECORD_NEXT:转到记录集中的下一条记录。
ID_RECORD_PREV:转到记录集中的上一条记录。
返回值
如果转移成功,则返回非零值;否则,如果拒绝了转移请求,则返回 0。
备注
默认实现调用与记录视图关联的 CRecordset
对象的相应 Move
成员函数。
默认情况下,如果用户在记录视图中更改了数据源上的当前记录,OnMove
会更新它。
应用程序向导创建一个包含第一条记录、最后一条记录、下一条记录和上一条记录菜单项的菜单资源。 如果选择可停靠工具栏选项,应用程序向导还会创建一个带有与这些命令对应的按钮的工具栏。
如果移过记录集中的最后一条记录,记录视图将继续显示最后一条记录。 如果向后移过第一条记录,记录视图将继续显示第一条记录。
注意
如果记录集没有记录,则调用 OnMove
将引发异常。 在执行相应的转移操作之前调用相应的用户界面更新处理函数— OnUpdateRecordFirst
、OnUpdateRecordLast
、OnUpdateRecordNext
或 OnUpdateRecordPrev
,以确定记录集是否包含任何记录。