CRecordView
CRecordView |
|
---|---|
一 个 CRecordView 对 象 是 在 控 件 中 显 示 数 据 库 记 录 的 视 。 这 种 视 是 一 种 直 接 连
接 到 一 个 CRecordset 对 象 上 的 格 式 视 。 此 视 是 从 一 个 对 话 框 模 板 资 源 创 建 的 , 并 将 CRecordSet 对 象 的 字 段 显 示 在 对 话 框 模 板 的 控 件 中 。 CRecordView 对 象 利用 对 话 框 数 据 交 换 ( DDX ) 和 记 录 字 段 交 换 ( RFX ) 机 制 , 使 格 式 上 的 控 件 和记 录 集 的 字 段 之 间 的 数 据 移 动 自 动 化 。 CRecordView 还 提 供 了 完 成 移 动 到 第 一个 , 下 一 个 , 上 一 个 或 最 后 一 个 记 录 的 缺 省 实 现 , 和 一 个 用 于 更 新 视 上 面 的 当前 记 录 的 接 口 。
注 意 如 果 你 正 在 使 用 数 据 访 问 对 象 ( DAO) 类 , 而 不 是 使 用 开 放 数 据 库连 接 ( ODBC ) 类 , 则 使 用 CDaoRecordView 来 代 替 。
创 建 应 用 程 序 的 最 常 用 的 方 法 是 利 用 AppWizard 。 AppWizard 创 建 记 录 视 类 及与 其 相 关 联 的 记 录 集 类 , 作 为 基 本 起 始 程 序 的 一 部 分 。 如 果 没 有 用 AppWizard 来 创 建 记 录 视 类 , 可 以 用 ClassWizard 在 以 后 再 创 建 记 录 视 类 。 如 果 只 是 简 单地 需 要 一 种 格 式 , 那 么 AppWizard 方 式 要 简 单 些 。 ClassWizard 可 以 让 你 决 定
在 以 后 开 发 过 程 中 使 用 一 个 记 录 视 。 利 用 ClassWizard 来 分 别 创 建 一 个 记 录 视和 一 个 记 录 集 , 然 后 连 接 它 们 , 是 一 种 灵 活 的 方 式 , 因 为 它 在 命 名 记 录 集 类 及其 .H 或 .CPP 文 件 时 给 予 你 较 多 的 控 制 。 这 种 方 式 也 使 得 在 同 一 个 记 录 类 上 可以 用 多 个 记 录 视 。
为 使 得 在 记 录 视 中 记 录 之 间 的 移 动 对 终 端 用 户 变 得 比 较 容 易 , AppWizard 为 移动 到 第 一 个 , 下 一 个 , 前 一 个 或 最 后 一 个 记 录 的 操 作 创 建 菜 单 ( 和 可 选 工 具 条 ) 资 源 。 如 果 是 用 ClassWizard 创 建 一 个 记 录 视 类 , 应 用 程 序 需 要 自 己 利 用 菜 单和 位 图 编 辑 器 来 创 建 这 些 资 源 。
CRecordView 记 载 用 户 在 记 录 集 中 的 位 置 , 以 便 记 录 视 可 以 更 新 用 户 界 面 。 当用 户 移 动 到 记 录 集 任 何 一 端 时 , 记 录 集 即 禁 止 用 户 界 面 对 象 – – – 例 如 菜 单 项 或工 具 条 – – – 以 阻 止 朝 同 一 个 方 向 再 移 动 下 去 。
#include <afxdb.h>
请 参 阅 CRecordse t, CFormView
CRecordView 类 成 员
Construction
CrecordView 构 造 一 个 CRecordView 对 象
Attributes
OnGetRecordset 返 回 一 个 指 向 CRecordset 派 生 类 对 象 的 指 针 。
ClassWizard 可 为 应 用 程 序 重 载 此 函 数 , 并 在 需 要时 创 建 记 录 集
IsOnFirstRecord 如 果 当 前 记 录 是 相 关 记 录 集 中 的 第 一 个 记 录 , 则
该 函 数 返 回 非 零 值
IsOnLastRecord 如 果 当 前 记 录 是 相 关 记 录 集 中 的 最 后 一 个 记 录 ,
则 该 函 数 返 回 非 零 值
Operations
OnMove 如 果 当 前 记 录 已 经 改 变 , 则 在 数 据 源 上 更 新 该 记录 , 然 后 移 动 到 指 定 记 录 ( 下 一 个 , 前 一 个 , 第一 个 或 最 后 一 个 )
成 员 函 数
CRecordView::CRecordView
CRecordView( LPCSTR lpszTemplateName ); CRecordView( UINT nIDTemplate );
参 数
lpszTemplateName
包 含 一 个 以 NULL 结 尾 的 字 符 串 , 此 字 符 串 是 一 个 对 话 框 模 板 资 源 的 名
称 。
nIDTemplate
包 含 一 个 对 话 框 模 板 资 源 的 ID 号。
说 明
当 应 用 程 序 创 建 一 个 CRecordView 派 生 类 对 象 时 , 可 调 用 此 构 造 函 数 的 任 何 一种 形 式 来 初 始 化 此 视 对 象 , 并 标 识 该 视 所 基 于 的 对 话 框 资 源 。 应 用 程 序 可 以 按名 称 ( 传 递 字 符 串 参 数 给 构 造 函 数 ) 也 可 以 按 其 ID ( 传 递 一 个 无 符 号 整 数 为 参数 给 构 造 函 数 ) 来 标 识 这 个 对 话 框 资 源 。 建 议 使 用 资 源 ID 。
注 意 应 用 程 序 的 派 生 类 必 须 提 供 自 己 的 构 造 函 数 。 在 派 生 类 的 构 造 函数 中 , 需 要 用 资 源 名 或 ID 为 参 数 来 调 用 CRecordView:: CRecordView 构造 函 数 , 如 下 面 的 示 例 所 示 。
C RecordView ::OnInitialUpdate 调 用 UpdateData , 后 者 调 用 DoDataExchange 。这个 初 始 DoDataExchange 调 用 连 接 CRecordView 控 件 ( 间 接 地 ) 与 ClassWizard 所 创 建 的 CRecordset 字 段 数 据 成 员 。 这 些 数 据 成 员 直 到 应 用 程 序 调 用 了
注 意 如 果 使 用 ClassWizard , 此 向 导 定 义 了 一 个 enum 值CRecordView::IDD , 并 在 构 造 函 数 的 成 员 初 始 化 列 表 中 说 明 此 值 , 参 看示 例 中 的 IDD_MYFORM 。 示 例 说 明 了 如 果 你 利 用 自 己 的 代 码 而 不 使 用ClassWizard 时 , 如 何 指 定 对 话 框 模 板 资 源 。
示 例
CMyRecordView::CMyRecordView()
: CRecordView( IDD_MYFORM )
{
//{{AFX_DATA_INIT( CMyRecordView )
// 注 意 : ClassWizard 将 在 此 添 加 成 员 初 始 化
//}}AFX_DATA_INIT
// 其 它 的 构 造 代 码 , 比 如 数 据 初 始 化
}
CWnd::UpdateData
CRecord V iew ::Is OnFirstRecord
BOOL IsOnFirstRecord();
返 回 值
如 果 当 前 记 录 是 记 录 集 中 的 第 一 个 记 录 , 则 返 回 非 零 值 ; 否 则 返 回 0 。
说 明
此 成 员 函 数 用 来 确 定 当 前 记 录 是 否 是 与 此 记 录 视 相 关 联 的 记 录 集 对 象 中 的 第 一个 记 录 。 该 函 数 可 以 用 于 编 写 应 用 程 序 自 己 实 现 的 命 令 更 新 处 理 函 数 , 代 替ClassWizard 编 制 的 缺 省命 令 更 新 处 理 函 数 。
如 果 用 户 移 动 到 了 第 一 个 记 录 , 则 框 架 将 禁 止 用 于 移 动 到 第 一 个 记 录 或 前 一 个记 录 的 用 户 界 面 对 象 。
请 参 阅 CRecordView::OnMove, CRecordView::IsOnLastRecord, CRecordset::IsBOF,
CRecordset::GetRecordCount CRecord V iew ::Is OnLastRecord BOOL IsOnLastRecord();
返 回 值
如 果 当 前 记 录 是 记 录 集 中 的 最 后 一 个 记 录 , 则 返 回 非 零 值 ; 否 则 返 回 0 。
说 明
此 成 员 函 数 用 来 确 定 当 前 记 录 是 否 是 与 此 记 录 视 相 关 联 的 记 录 集 对 象 中 的 最 后
- 个 记 录 。 该 函 数 可 以 用 来 编 写 应 用 程 序 实 现 的 缺 省 命
令 更 新 处 理 函 数 , 使
ClassWizard 能 支 持 在 记 录 间 移 动 的 用 户 界 面 。
警 告 此 函 数 的 结 果 是 可 靠 的 , 但 是 在 这 样 的 情 况 下 , 即 只 有 当 用 户 已经 移 动 到 了 记 录 集 的 结 尾 记 录 后 , 记 录 视 才 能 检 测 到 记 录 集 的 结 尾 , 函数 的 结 果 是 不 可 靠 的 。 在 此 情 况 下 , 用 户 必 须 移 过 最 后 一 个 记 录 后 , 记录 视 才 能 获 知 它 必 须 禁 止 用 于 移 动 到 下 一 个 记 录 或 最 后 一 个 记 录 的 任 何界 面 对 象 。 如 果 用 户 移 过 最 后 一 个 记 录 , 又 移 回 到 最 后 一 个 记 录 ( 或 最后 一 个 记 录 的 前 面 ) , 记 录 视 可 以 跟 踪 用 户 在 记 录 集 中 的 位 置 , 并 正 确地 禁 止 用 户 界 面 对 象 。 在 调 用 实 现 函 数 OnRecordLast ( 该 函 数 处 理ID_RECORD_LAST 命 令 ) 或 CRecordset::MoveLast 函 数 之 后 , IsOnLastRecord 也 不 可 靠 。
请 参 阅 CRecordView::OnMove, CRecordView::IsOnFirstRecord,
CRecordset::IsEOF,
CRecordset::GetRecordCount
CRecord V iew ::OnGetRecordset
virtual CRecordset* O nGetRecordset() = 0;
返 回 值
如 果 成 功 地 创 建 了 对 象 , 则 返 回 一 个 指 向 CRecordset 派 生 对 象 的 指 针 ; 否 则 返回 一 个 NULL 指 针 。
说 明
此 函 数 返 回 一 个 指 向 与 此 记 录 视 相 关 联 的 CRecordset 派 生 对 象 的 指 针 。 应 用 程序 必 须 重 载 这 个 成 员 函 数 来 构 造 或 获 取 一 个 记 录 集 对 象 , 并 返 回 一 个 指 向 该 对象 的 指 针 。 如 果 应 用 程 序 利 用 ClassWizard 来 声 明 自 己 的 记 录 视 类 , 则 该 向 导
为 应 用 程 序 编 写 一 个 缺 省 的 重 载 。 ClassWizard 缺 省 实 现 的 OnGetRecordset 函数 返 回 存 储 在 记 录 视 中 的 记 录 集 指 针 ( 如 果 存 在 的 话 ) 。 如 果 不 存 在 , 则 它 构造 一 个 具 有 你 在 ClassWizard 所 指 定 的 类 型 的 记 录 集 对 象 ,并 调 用 该 对 象 的 Open 成 员 函 数 打 开 表 或 运 行 查 询 , 然 后 返 回 一 个 指 向 此 记 录 集 对 象 的 指 针 。
请 参 阅 CRecordset, CRecordset::Open
CRecordView::OnMove
virtual BOOL OnMove( UINT nIDMoveCommand ); throw( CDBException );
返 回 值
如 果 移 动 成 功 则 返 回 非 零 值 ; 否 则 , 如 果 移 动 请 求 被 否 决 则 返 回 0 。
参 数
nIDMoveCommand
是 下 列 标 准 命 令 ID 值 之 一 :
-
ID_RECORD_FIRST 移 动 到 记 录 集 中 的 第 一 个 记 录 。
-
ID_RECORD_LAST 移 动 到 记 录 集 中 的 最 后 一 个 记 录 。
-
ID_RECORD_NEXT 移 动 到 记 录 集 中 的 下 一 个 记 录 。
-
ID_RECORD_PREV 移 动 到 记 录 集 中 的 前 一 个 记 录 。
说 明
此 成 员 函 数 用 来 移 动 到 记 录 集 中 的 一 个 不 同 的 记 录 , 并 将 该 记 录 的 字 段 显 示 在记 录 视 的 控 件 中 。 缺 省 实 现 是 调 用 与 此 记 录 视 相 关 联 的 CRecordset 对 象 的 相 应的 M ove 成 员 函 数 。
缺 省 的 , 如 果 用 户 在 记 录 视 中 改 变 了 当 前 记 录 , 则 OnMove 将 更 新 数 据 源 上 的当 前 记 录 。
AppWizard 创 建 一 个 带 有 First Record ( 第 一 个 记 录 ) , Last Record ( 最 后 一 个记 录 ) , Next Record ( 下 一 个 记 录 ) , 和 Previous Record ( 前 一 个 记 录 ) 等 菜单 项 的 菜 单 。 如 果 选 择 Initial Toolbar 选 项 , 则 AppWizard 还 创 建 一 个 带 有 对应 于 这 些 命 令 的 工 具 条 。
如 果 你 移 动 过 了 记 录 集 中 的 最 后 一 个 记 录 , 记 录 视 仍 显 示 最 后 一 个 记 录 。 如 果向 前 移 动 超 过 了 第 一 个 记 录 , 则 记 录 视 仍 显 示 第 一 个 记 录 。
警 告 如 果 记 录 集 中 没 有 记 录 , 则 调 用 OnMove 将 抛 出 一 个 异 常 。 在 执 行任 何 移 动 操 作 之 前 , 可 以 先 调 用 相 应 的 适 当 用 户 界 面 更 新 处 理 函 数 – – – OnUpdateRecordFirst , OnUpdateRecordLast , OnUpdateRecord 或OnUpdateRecordPrev 来 确 定 记 录 集 中 是 否 还 有 记 录 。
请 参 阅 CRecordset::Move