📄 testodbcview.cpp
字号:
// TestODBCView.cpp : implementation of the CTestODBCView class
//
#include "studentdlg.h"
#include "stdafx.h"
#include "TestODBC.h"
#include "studentdlg.h"
//包含MainFrm头文件
#include "MainFrm.h"
#include "TestODBCSet.h"
#include "TestODBCDoc.h"
#include "TestODBCView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CTestODBCView
IMPLEMENT_DYNCREATE(CTestODBCView, CRecordView)
BEGIN_MESSAGE_MAP(CTestODBCView, CRecordView)
//{{AFX_MSG_MAP(CTestODBCView)
ON_BN_CLICKED(IDC_BUTTON_FIRST, OnButtonFirst)
ON_BN_CLICKED(IDC_BUTTON_LAST, OnButtonLast)
ON_BN_CLICKED(IDC_BUTTON_NEXT, OnButtonNext)
ON_BN_CLICKED(IDC_BUTTON_PREV, OnButtonPrev)
ON_BN_CLICKED(IDC_ADD, OnAdd)
ON_BN_CLICKED(IDC_DELETE, OnDelete)
ON_BN_CLICKED(IDC_EDIT, OnEdit)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CRecordView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CRecordView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CRecordView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CTestODBCView construction/destruction
CTestODBCView::CTestODBCView()
: CRecordView(CTestODBCView::IDD)
{
//{{AFX_DATA_INIT(CTestODBCView)
m_pSet = NULL;
//}}AFX_DATA_INIT
// TODO: add construction code here
}
CTestODBCView::~CTestODBCView()
{
}
void CTestODBCView::DoDataExchange(CDataExchange* pDX)
{
CRecordView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CTestODBCView)
DDX_FieldText(pDX, IDC_EDIT_NAME, m_pSet->m_stuName, m_pSet);
DDV_MaxChars(pDX, m_pSet->m_stuName, 10);
DDX_FieldText(pDX, IDC_EDIT_PROFCODE, m_pSet->m_stuProfCode, m_pSet);
DDV_MinMaxInt(pDX, m_pSet->m_stuProfCode, 0, 9999);
DDX_FieldText(pDX, IDC_EDIT_SEX, m_pSet->m_stySex, m_pSet);
DDV_MaxChars(pDX, m_pSet->m_stySex, 2);
DDX_FieldText(pDX, IDC_EDIT_SNO, m_pSet->m_stuID, m_pSet);
DDV_MaxChars(pDX, m_pSet->m_stuID, 10);
DDX_Control(pDX, IDC_MSFLEXGRID1, m_Flex);
//}}AFX_DATA_MAP
}
BOOL CTestODBCView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CRecordView::PreCreateWindow(cs);
}
//初始化时获得当前总记录
void CTestODBCView::OnInitialUpdate()
{
m_pSet = &GetDocument()->m_testODBCSet;
CRecordView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
//初始化数据库记录的总数
while(!m_pSet->IsEOF())
{
m_pSet->MoveNext();
m_pSet->GetRecordCount();
}
m_pSet->MoveFirst();
//初始化数据并显示在FlexGrid控件中
m_Flex.SetCols(5);
m_Flex.SetRows(m_pSet->GetRecordCount()+1);
m_Flex.SetColWidth(-1,1360);
m_Flex.SetRow(0);
m_Flex.SetCol(1);
m_Flex.SetText("学号");
m_Flex.SetRow(0);
m_Flex.SetCol(2);
m_Flex.SetText("姓名");
m_Flex.SetRow(0);
m_Flex.SetCol(3);
m_Flex.SetText("性别");
m_Flex.SetRow(0);
m_Flex.SetCol(4);
m_Flex.SetText("专业代号");
int iRow=1;
while(!m_pSet->IsEOF())
{
CString str;
str.Format("记录%d",iRow);
m_Flex.SetCol(0);
m_Flex.SetRow(iRow);
m_Flex.SetText(str);
m_Flex.SetRow(iRow);
m_Flex.SetCol(1);
m_Flex.SetText(m_pSet->m_stuID);
m_Flex.SetRow(iRow);
m_Flex.SetCol(2);
m_Flex.SetText(m_pSet->m_stuName);
m_Flex.SetRow(iRow);
m_Flex.SetCol(3);
m_Flex.SetText(m_pSet->m_stySex);
m_Flex.SetRow(iRow);
m_Flex.SetCol(4);
CString strProf;
strProf.Format("%d",m_pSet->m_stuProfCode);
m_Flex.SetText(strProf);
iRow++;
m_pSet->MoveNext();
}
m_Flex.SetRow(1);
m_Flex.SetCol(1);
m_pSet->MoveFirst();
}
/////////////////////////////////////////////////////////////////////////////
// CTestODBCView printing
BOOL CTestODBCView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CTestODBCView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CTestODBCView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CTestODBCView diagnostics
#ifdef _DEBUG
void CTestODBCView::AssertValid() const
{
CRecordView::AssertValid();
}
void CTestODBCView::Dump(CDumpContext& dc) const
{
CRecordView::Dump(dc);
}
CTestODBCDoc* CTestODBCView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CTestODBCDoc)));
return (CTestODBCDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CTestODBCView database support
CRecordset* CTestODBCView::OnGetRecordset()
{
return m_pSet;
}
/////////////////////////////////////////////////////////////////////////////
// CTestODBCView message handlers
//数据库移到第一位
void CTestODBCView::OnButtonFirst()
{
// TODO: Add your control notification handler code here
m_pSet->MoveFirst();
UpdateData(FALSE);
}
//数据库移到最后一位
void CTestODBCView::OnButtonLast()
{
// TODO: Add your control notification handler code here
m_pSet->MoveLast();
UpdateData(FALSE);
}
//向前移动数据
void CTestODBCView::OnButtonNext()
{
// TODO: Add your control notification handler code here
if(m_pSet->IsEOF())
{
m_pSet->MoveLast();
}
m_pSet->MoveNext();
UpdateData(FALSE);
}
//向后移动数据
void CTestODBCView::OnButtonPrev()
{
// TODO: Add your control notification handler code here
if(m_pSet->IsBOF())
{
m_pSet->MoveFirst();
}
m_pSet->MovePrev();
UpdateData(FALSE);
}
//在状态栏显示相关信息
BOOL CTestODBCView::OnCommand(WPARAM wParam, LPARAM lParam)
{
// TODO: Add your specialized code here and/or call the base class
CString str;
CMainFrame *pFrame=(CMainFrame*)AfxGetApp()->m_pMainWnd;
CStatusBar* pStatus=&pFrame->m_wndStatusBar;
if(pStatus)
{
CRecordsetStatus rStatus;
m_pSet->GetStatus(rStatus);
str.Format("当前记录:%d/总记录:%d",1+rStatus.m_lCurrentRecord,m_pSet->GetRecordCount());
pStatus->SetPaneText(1,str); //更新第二个窗格的文本
}
return CRecordView::OnCommand(wParam, lParam);
}
void CTestODBCView::OnDelete()
{
// TODO: Add your control notification handler code here
CRecordsetStatus rStatus;
m_pSet->GetStatus(rStatus);
m_pSet->Delete();
if(rStatus.m_lCurrentRecord==0)
{
m_pSet->MoveNext();
}
m_pSet->MoveFirst();
UpdateData(FALSE);
}
//添加相应数据
void CTestODBCView::OnAdd()
{
// TODO: Add your control notification handler code here
CStudentDlg dlg;
if(dlg.DoModal()==IDOK)
{
m_pSet->AddNew();
m_pSet->m_stuID=dlg.m_StuNo;
m_pSet->m_stuName=dlg.m_StuName;
m_pSet->m_stySex=dlg.m_StuSex;
m_pSet->m_stuProfCode=dlg.m_StuProf;
m_pSet->Update();
m_pSet->Requery();
}
OnInitialUpdate();
}
//修改数据
void CTestODBCView::OnEdit()
{
// TODO: Add your control notification handler code here
CStudentDlg dlg;
dlg.m_StuNo=m_pSet->m_stuID;
dlg.m_StuName=m_pSet->m_stuName;
dlg.m_StuSex=m_pSet->m_stySex;
dlg.m_StuProf=m_pSet->m_stuProfCode;
if(dlg.DoModal()==IDOK)
{
m_pSet->Edit();
m_pSet->m_stuID=dlg.m_StuNo;
m_pSet->m_stuName=dlg.m_StuName;
m_pSet->m_stuProfCode=dlg.m_StuProf;
m_pSet->m_stySex=dlg.m_StuSex;
m_pSet->Update();
UpdateData(FALSE);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -