⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 s14_02view.cpp

📁 本书分为五个部分
💻 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 + -