📄 s14_02view.cpp
字号:
// S14_02View.cpp : CS14_02View 类的实现
//
#include "stdafx.h"
#include "S14_02.h"
#include "S14_02Set.h"
#include "S14_02Doc.h"
#include "S14_02View.h"
#include "MainFrm.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CS14_02View
IMPLEMENT_DYNCREATE(CS14_02View, CRecordView)
BEGIN_MESSAGE_MAP(CS14_02View, CRecordView)
// 标准打印命令
ON_COMMAND(ID_FILE_PRINT, CRecordView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CRecordView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CRecordView::OnFilePrintPreview)
ON_COMMAND(ID_RECORD_ADD, OnRecordAdd)
ON_COMMAND(ID_RECORD_DEL, OnRecordDel)
ON_COMMAND(ID_RECORD_EDIT, OnRecordEdit)
ON_COMMAND(ID_RECORD_QUERY, OnRecordQuery)
END_MESSAGE_MAP()
// CS14_02View 构造/销毁
CS14_02View::CS14_02View()
: CRecordView(CS14_02View::IDD)
//, m_lProductID(0)
//, m_sProductName(_T(""))
//, m_lSupplierID(0)
//, m_lCategoryID(0)
//, m_sQuantityPerUnit(_T(""))
//, m_dUnitPrice(0)
//, m_nUnitsInStock(0)
//, m_nUnitsOnOrder(0)
//, m_nReorderLevel(0)
//, m_bDiscontinued(false)
, m_CategoryIDParam(0)
{
m_pSet = NULL;
// TODO: 在此处添加构造代码
m_bAddingRecord = FALSE;
}
CS14_02View::~CS14_02View()
{
}
void CS14_02View::DoDataExchange(CDataExchange* pDX)
{
CRecordView::DoDataExchange(pDX);
// 可以在此处插入 DDX_Field* 函数以将控件“连接”到数据库字段,例如
// DDX_FieldText(pDX, IDC_MYEDITBOX, m_pSet->m_szColumn1, m_pSet)
// DDX_FieldCheck(pDX, IDC_MYCHECKBOX, m_pSet->m_bColumn2, m_pSet);
// 有关更多信息,请参阅 MSDN 和 ODBC 示例
DDX_FieldText(pDX, IDC_PRODUCTID, m_pSet->m_ProductID, m_pSet);
DDX_FieldText(pDX, IDC_PRODUCTNAME, m_pSet->m_ProductName, m_pSet);
DDX_FieldText(pDX, IDC_SUPPLIERID, m_pSet->m_SupplierID, m_pSet);
DDX_FieldText(pDX, IDC_CATEGORYID, m_pSet->m_CategoryID, m_pSet);
DDX_FieldText(pDX, IDC_QUANTITYPERUNIT, m_pSet->m_QuantityPerUnit, m_pSet);
DDX_FieldText(pDX, IDC_UNITPRICE, m_pSet->m_UnitPrice, m_pSet);
DDX_FieldText(pDX, IDC_UNITSINSTOCK, m_pSet->m_UnitsInStock, m_pSet);
DDX_FieldText(pDX, IDC_UNITSONORDER, m_pSet->m_UnitsOnOrder, m_pSet);
DDX_FieldText(pDX, IDC_REORDERLEVEL, m_pSet->m_ReorderLevel, m_pSet);
DDX_FieldCheck(pDX, IDC_DISCONTINUED, m_pSet->m_Discontinued, m_pSet);
DDX_Text(pDX, IDC_CATEGORYIDPARAM, m_CategoryIDParam);//对话框数据交换
}
BOOL CS14_02View::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: 在此处通过修改 CREATESTRUCT cs 来修改窗口类或
// 样式
return CRecordView::PreCreateWindow(cs);
}
void CS14_02View::OnInitialUpdate()
{
m_pSet = &GetDocument()->m_S14_02Set;
CRecordView::OnInitialUpdate();
DisplayRecordPos( );
}
// CS14_02View 打印
BOOL CS14_02View::OnPreparePrinting(CPrintInfo* pInfo)
{
// 默认准备
return DoPreparePrinting(pInfo);
}
void CS14_02View::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: 打印前添加额外的初始化
}
void CS14_02View::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: 打印后添加清除过程
}
// CS14_02View 诊断
#ifdef _DEBUG
void CS14_02View::AssertValid() const
{
CRecordView::AssertValid();
}
void CS14_02View::Dump(CDumpContext& dc) const
{
CRecordView::Dump(dc);
}
CS14_02Doc* CS14_02View::GetDocument() const // 非调试版本是内联的
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CS14_02Doc)));
return (CS14_02Doc*)m_pDocument;
}
#endif //_DEBUG
// CS14_02View 数据库支持
CRecordset* CS14_02View::OnGetRecordset()
{
return m_pSet;
}
BOOL CS14_02View::OnMove(UINT nIDMoveCommand)
{
//如果当前正处在添加状态下,则更新记录集
//if( m_bAddingRecord )
//{
// UpdateData(TRUE); //更新视图控件到字段数据成员
// m_pSet->Update(); //更新记录集
// m_pSet->Requery(); //重建记录集
// m_pSet->MoveLast(); //移动到添加的记录
// m_bAddingRecord = FALSE; //清除添加标志
//}
BOOL retCode = CRecordView::OnMove(nIDMoveCommand);
DisplayRecordPos( );
return retCode;
}
// 显示当前记录的位置状态。
void CS14_02View::DisplayRecordPos(void)
{
long currentRec; //当前记录索引号
long totalRec; //总记录数
CString strInfo; //信息字符串
//获取主框架状态条对象
CMainFrame* pMainFrame = (CMainFrame*)AfxGetMainWnd();
CStatusBar& wndStatusBar = pMainFrame->GetStatusBar();
CRecordsetStatus recStatus;
m_pSet->GetStatus(recStatus);
CDBVariant varRecordToReturnTo;
if( m_pSet->CanBookmark() )
m_pSet->GetBookmark( varRecordToReturnTo );
else
currentRec = recStatus.m_lCurrentRecord;
//如果没有, 则确定记录数. 是通过移动记录直到结束来确定的.
if( !recStatus.m_bRecordCountFinal )
{
UpdateData(FALSE);
m_pSet->MoveFirst();
while(!m_pSet->IsEOF() )
m_pSet->MoveNext();
//恢复当前记录.
if( m_pSet->CanBookmark() )
m_pSet->SetBookmark( varRecordToReturnTo );
else
m_pSet->SetAbsolutePosition(currentRec+1);//从1开始
UpdateData(TRUE);
}
totalRec = m_pSet->GetRecordCount();//总记录数
strInfo.LoadString(ID_INDICATOR_REC);
strInfo.Format(strInfo, currentRec+1, totalRec);
wndStatusBar.SetPaneText(1, strInfo);//更新状态栏
}
void CS14_02View::OnRecordAdd()
{
UpdateData(TRUE);
// 检查记录集是否可添加
if( !m_pSet->IsOpen( ) || !m_pSet->CanAppend( ) )
{
AfxMessageBox( "记录集未打开或不支持添加。");
return;
}
m_pSet->SetFieldNull(NULL);//清空所有字段
m_pSet->AddNew( );//将记录集设置成添加模式
// 设置字段新值。注意关键字段的唯一性。
m_pSet->m_ProductID = m_pSet->GetRecordCount() + 1;
m_pSet->m_ProductName = L"Wheat Beer of NanZhou";
m_pSet->m_CategoryID = 1;
m_pSet->m_SupplierID = 1;
m_pSet->m_QuantityPerUnit = L"10 - 500 ml bottles";
m_pSet->m_UnitPrice = 120.0;
m_pSet->m_UnitsInStock = 0;
m_pSet->m_UnitsOnOrder = 0;
m_pSet->m_ReorderLevel = 0;
m_pSet->m_Discontinued = FALSE;
if( !m_pSet->Update( ) )//提交更新
{
AfxMessageBox( "记录没有被更新(因为记录字段没有被修改)。" );
return;
}
m_pSet->Requery( );//重建记录集
m_pSet->MoveLast();//移动到最后一条记录
DisplayRecordPos( );//更新记录位置状态
UpdateData(FALSE);
}
//void CS14_02View::OnRecordAdd()
//{
// CRecordsetStatus rStatus;
// m_pSet->GetStatus(rStatus);
// if( rStatus.m_lCurrentRecord>=0 )//记录集中存在记录
// {
// UpdateData(TRUE); //更新视图控件到字段数据成员
// if( !m_bAddingRecord )
// m_pSet->Edit(); //将记录集设为编辑模式
//
// m_pSet->Update(); //更新记录集
// m_pSet->MoveLast(); //确保不是在第一条记录上添加操作
// }
// m_bAddingRecord = TRUE; //设置添加标志
// m_pSet->SetFieldNull(NULL); //清空所有字段
// m_pSet->AddNew( ); //将记录集设置成添加模式
//
// UpdateData(FALSE); //清除视图控件
//}
void CS14_02View::OnRecordDel()
{
if( m_pSet->CanUpdate( ) )
{
if( AfxMessageBox("确定要删除当前记录吗?", MB_YESNO )==IDYES )
{
m_pSet->Delete();//标记为已删除
m_pSet->Requery();//重建记录集
m_pSet->MoveLast();//移动到最后一条记录
DisplayRecordPos();//更新记录位置状态
UpdateData(FALSE);
}
}
}
void CS14_02View::OnRecordEdit()
{
if( m_pSet->CanUpdate( ) )//是否有可更新能力
{
m_pSet->Edit( );//将记录集设置为编辑状态
if (!UpdateData())//更新记录集的字段数据成员
return;
// 设置字段新值。注意关键字段的唯一性。
m_pSet->m_ProductName = L"Wheat Beer of DongFong";
if( !m_pSet->Update( ) )//提交更新
{
AfxMessageBox( "记录没有被更新(因为记录字段没有被修改)。" );
return;
}
DisplayRecordPos();//更新记录位置状态
UpdateData(FALSE);//更新视图控件
}
}
void CS14_02View::OnRecordQuery()
{
UpdateData();//更新运行时参数
m_pSet->m_CategoryIDParam = m_CategoryIDParam;//指定参数
m_pSet->Requery();//重建记录集
DisplayRecordPos();//更新记录位置状态
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -