📄 demo02view.cpp
字号:
// Demo02View.cpp : implementation of the CDemo02View class
//
#include "stdafx.h"
#include "Demo02.h"
#include "Demo02Doc.h"
#include "Demo02View.h"
//增加 CMainFrame的引用声明
#include "MainFrm.h"
//增加 UserRecordSet的引用声明
#include "UserRecordSet.h"
//增加UserDlg的引用申明
#include "UserDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CDemo02View
IMPLEMENT_DYNCREATE(CDemo02View, CListView)
BEGIN_MESSAGE_MAP(CDemo02View, CListView)
//{{AFX_MSG_MAP(CDemo02View)
ON_NOTIFY_REFLECT(NM_DBLCLK, OnDblclk)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDemo02View construction/destruction
CDemo02View::CDemo02View()
{
// TODO: add construction code here
}
CDemo02View::~CDemo02View()
{
}
BOOL CDemo02View::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
// 设置CListCtrl的格式为:LVS_REPORT 并且 LVS_SINGLESEL
cs.style|=LVS_REPORT|LVS_SINGLESEL;
return CListView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CDemo02View drawing
void CDemo02View::OnDraw(CDC* pDC)
{
CDemo02Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
}
void CDemo02View::OnInitialUpdate()
{
//创建一个CListCtrl指针,
CListCtrl *ctl;
//将CListCtrl指针指向
ctl=&GetListCtrl();
//设置列的题头
ctl->InsertColumn(0,"用户ID",LVCFMT_LEFT,50);
ctl->InsertColumn(1,"用户名",LVCFMT_LEFT,60);
ctl->InsertColumn(2,"密码",LVCFMT_LEFT,60);
ctl->InsertColumn(3,"权限",LVCFMT_LEFT,60);
ctl->InsertColumn(4,"性别",LVCFMT_LEFT,60);
ctl->InsertColumn(5,"住址",LVCFMT_LEFT,60);
ctl->InsertColumn(6,"单位",LVCFMT_LEFT,60);
ctl->InsertColumn(8,"电子邮箱",LVCFMT_LEFT,60);
ctl->InsertColumn(7,"职务",LVCFMT_LEFT,60);
ctl->InsertColumn(9,"电话",LVCFMT_LEFT,60);
ctl->InsertColumn(10,"个人介绍",LVCFMT_LEFT,100);
//输入一组测试值的题头
ctl->InsertItem(0,"1");
ctl->SetItemText(0,1,"陈旭");
ctl->SetItemText(0,2,"1234");
ctl->SetItemText(0,3,"S--------------");
ctl->SetItemText(0,4,"男");
ctl->SetItemText(0,5,"清华大学");
ctl->SetItemText(0,6,"清华大学学生宿舍");
ctl->SetItemText(0,7,"学生");
ctl->SetItemText(0,8,"student@mails.tsinghua.edu.cn");
ctl->SetItemText(0,9,"1390");
ctl->SetItemText(0,10,"自我介绍....");
CListView::OnInitialUpdate();
//6. 将CMainFrame的m_ListView指针变量指向CDemo02View的实例
CMainFrame * m_Frm = (CMainFrame *)::AfxGetMainWnd();
m_Frm->m_ListView = this;
// TODO: You may populate your ListView with items by directly accessing
// its list control through a call to GetListCtrl().
}
/////////////////////////////////////////////////////////////////////////////
// CDemo02View diagnostics
#ifdef _DEBUG
void CDemo02View::AssertValid() const
{
CListView::AssertValid();
}
void CDemo02View::Dump(CDumpContext& dc) const
{
CListView::Dump(dc);
}
CDemo02Doc* CDemo02View::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDemo02Doc)));
return (CDemo02Doc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CDemo02View message handlers
void CDemo02View::RemoveAll()
{
//增加值针变量指向ListView的CListCtrl
CListCtrl *ctl;
ctl=&GetListCtrl();
//删除CListCtrl中的所有记录;
ctl->DeleteAllItems();
}
void CDemo02View::ListUser(CString strUserName)
{
//删除前此输出的用户记录
RemoveAll();
//建立一个指针,用以操作ListCtrl输出用户记录
CListCtrl *ctl;
ctl=&GetListCtrl();
//创建CUserRecordSet的实例
CUserRecordSet m_UserRecordSet;
//记录用户序号
int i = 0;
char chrTemp='%';
CString strTemp;
try
{
if(m_UserRecordSet.IsOpen())
m_UserRecordSet.Close();
//设置查询条件"UserName=strUserName"
m_UserRecordSet.m_strFilter.Format("UserName like '%c%s%c' order by UserID ASC",
chrTemp,strUserName.operator LPCTSTR(),chrTemp);
m_UserRecordSet.Open(CRecordset::snapshot,NULL,CRecordset::none);
//输出匹配上查询条件用户记录,直到记录为空
while(!m_UserRecordSet.IsEOF())
{
//将UserID从整型转换为CString,以便输出
strTemp.Format("%d",m_UserRecordSet.m_UserID);
//设置ListCtrl记录的Item值
ctl->InsertItem(i,strTemp);
ctl->SetItemText(i,1,m_UserRecordSet.m_UserName);
ctl->SetItemText(i,2,m_UserRecordSet.m_UserPwd);
ctl->SetItemText(i,3,m_UserRecordSet.m_UserAble);
ctl->SetItemText(i,4,m_UserRecordSet.m_UserSex);
ctl->SetItemText(i,5,m_UserRecordSet.m_UserDep);
ctl->SetItemText(i,6,m_UserRecordSet.m_UserAddr);
ctl->SetItemText(i,7,m_UserRecordSet.m_UserTitle);
ctl->SetItemText(i,8,m_UserRecordSet.m_UserEmail);
ctl->SetItemText(i,9,m_UserRecordSet.m_UserPhone);
ctl->SetItemText(i,10,m_UserRecordSet.m_UserInfo);
//记录游标移到下一条记录
m_UserRecordSet.MoveNext();
}
//关闭记录集
if(m_UserRecordSet.IsOpen())
m_UserRecordSet.Close();
}
//意外捕获
catch(CDBException*e)
{
e->ReportError ();
//e->Delete ();
return;
}
}
void CDemo02View::EditCurUser()
{
//建立一个指针,用以操作ListCtrl输出用户记录
CListCtrl *ctl;
ctl=&GetListCtrl();
//寻找当前选中的记录的位置
POSITION pos=ctl->GetFirstSelectedItemPosition();
if (pos==NULL)
{
//如果没有选择记录,则提示并退出
AfxMessageBox("请先选中一条记录!");
return;
}
//获取当前记录的位置游标
int m_CurUser=ctl->GetNextSelectedItem(pos);
//
//创建一个CUserDlg的实例
CUserDlg m_UserDlg;
//创建一个临时字符串来保存当前用户信息
char chrTemp[201] = {'\0'};
//初始化m_UserDlg的用户信息
ctl->GetItemText(m_CurUser,1,chrTemp,sizeof(char[20]));
m_UserDlg.m_UserName = chrTemp;
ctl->GetItemText(m_CurUser,2,chrTemp,sizeof(char[20]));
m_UserDlg.m_UserPwd = chrTemp;
ctl->GetItemText(m_CurUser,3,chrTemp,sizeof(char[20]));
m_UserDlg.m_UserAble = chrTemp;
ctl->GetItemText(m_CurUser,4,chrTemp,sizeof(char[4]));
m_UserDlg.m_UserSex = chrTemp;
ctl->GetItemText(m_CurUser,5,chrTemp,sizeof(char[50]));
m_UserDlg.m_UserAddr = chrTemp;
ctl->GetItemText(m_CurUser,6,chrTemp,sizeof(char[50]));
m_UserDlg.m_UserDep = chrTemp;
ctl->GetItemText(m_CurUser,7,chrTemp,sizeof(char[20]));
m_UserDlg.m_UserTitle = chrTemp;
ctl->GetItemText(m_CurUser,8,chrTemp,sizeof(char[50]));
m_UserDlg.m_UserEmail = chrTemp;
ctl->GetItemText(m_CurUser,9,chrTemp,sizeof(char[20]));
m_UserDlg.m_UserPhone = chrTemp;
ctl->GetItemText(m_CurUser,10,chrTemp,sizeof(char[200]));
m_UserDlg.m_UserInfo = chrTemp;
//设置用户对话框窗口标题
m_UserDlg.m_Title = "修改用户信息";
//将变量内容更新到对话框中,并显示对话框
if(m_UserDlg.DoModal()!=IDOK)
{
//如果用户选择取消按钮,则退出
return;
}
//如果用户选择了"确定按钮",则进行下面的数据库更新
//取得用户ID
ctl->GetItemText(m_CurUser,0,chrTemp,sizeof(char[20]));
//将用户ID转换为整数保存,后面的数据库操作将以此为匹配条件
int m_CurUserID = atoi(chrTemp);
//创建CUserRecordSet的实例
CUserRecordSet m_UserRecordSet;
try
{
if(m_UserRecordSet.IsOpen())
m_UserRecordSet.Close();
//输入匹配条件UserID = m_CuruserID
m_UserRecordSet.m_strFilter.Format(" UserID = %d order by UserID",m_CurUserID);
m_UserRecordSet.Open(CRecordset::snapshot,NULL,CRecordset::none);
//如果用户记录存在,则进行修改操作
if(m_UserRecordSet.IsOpen() && !m_UserRecordSet.IsEOF())
{
//设置编辑当前记录
m_UserRecordSet.Edit();
//开始编辑该条记录的内容
m_UserRecordSet.m_UserAble = m_UserDlg.m_UserAble;
m_UserRecordSet.m_UserAddr = m_UserDlg.m_UserAddr;
m_UserRecordSet.m_UserDep = m_UserDlg.m_UserDep;
m_UserRecordSet.m_UserEmail = m_UserDlg.m_UserEmail;
m_UserRecordSet.m_UserInfo = m_UserDlg.m_UserInfo;
m_UserRecordSet.m_UserName = m_UserDlg.m_UserName;
m_UserRecordSet.m_UserPhone = m_UserDlg.m_UserPhone;
m_UserRecordSet.m_UserPwd = m_UserDlg.m_UserPwd;
m_UserRecordSet.m_UserSex = m_UserDlg.m_UserSex;
m_UserRecordSet.m_UserTitle = m_UserDlg.m_UserTitle;
//如果可以更新,则更新到数据库
if(m_UserRecordSet.CanUpdate())
{
m_UserRecordSet.Update();
}
//更新完毕,关闭数据库
if(m_UserRecordSet.IsOpen())
m_UserRecordSet.Close();
//提示用户,修改成功
AfxMessageBox("修改成功!");
}
else //考虑特例,如果操作中用户信息不存在了
{
//关闭数据库
if(m_UserRecordSet.IsOpen())
m_UserRecordSet.Close();
//提示用户
AfxMessageBox("该记录不存在,无从修改!");
return;
}
}
catch(CDBException*e)
{
e->ReportError ();
//e->Delete ();
return;
}
//将用户信息及时更新到ListCtrl中
ctl->SetItemText(m_CurUser,1,m_UserDlg.m_UserName);
ctl->SetItemText(m_CurUser,2,m_UserDlg.m_UserPwd);
ctl->SetItemText(m_CurUser,3,m_UserDlg.m_UserAble);
ctl->SetItemText(m_CurUser,4,m_UserDlg.m_UserSex);
ctl->SetItemText(m_CurUser,5,m_UserDlg.m_UserAddr);
ctl->SetItemText(m_CurUser,6,m_UserDlg.m_UserDep);
ctl->SetItemText(m_CurUser,7,m_UserDlg.m_UserTitle);
ctl->SetItemText(m_CurUser,8,m_UserDlg.m_UserEmail);
ctl->SetItemText(m_CurUser,9,m_UserDlg.m_UserPhone);
ctl->SetItemText(m_CurUser,10,m_UserDlg.m_UserInfo);
}
void CDemo02View::OnDblclk(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
*pResult = 0;
//直接到用相应函数进行处理
EditCurUser();
}
void CDemo02View::DelCurUser()
{
//建立一个指针,用以操作ListCtrl输出用户记录
CListCtrl *ctl;
ctl=&GetListCtrl();
//寻找当前选中的记录的位置
POSITION pos=ctl->GetFirstSelectedItemPosition();
if (pos==NULL)
{
//如果没有选择记录,则提示并退出
AfxMessageBox("请先选中一条记录!");
return;
}
//获取当前记录的位置游标
int m_CurUser=ctl->GetNextSelectedItem(pos);
//
//创建一个CUserDlg的实例
CUserDlg m_UserDlg;
//创建一个临时字符串来保存当前用户信息
char chrTemp[21] = {'\0'};
//取得用户ID
ctl->GetItemText(m_CurUser,0,chrTemp,sizeof(char[20]));
//将用户ID转换为整数保存,后面的数据库操作将以此为匹配条件
int m_CurUserID = atoi(chrTemp);
//创建CUserRecordSet的实例
CUserRecordSet m_UserRecordSet;
try
{
if(m_UserRecordSet.IsOpen())
m_UserRecordSet.Close();
//输入匹配条件UserID = m_CuruserID
m_UserRecordSet.m_strFilter.Format(" UserID = %d order by UserID",m_CurUserID);
m_UserRecordSet.Open(CRecordset::snapshot,NULL,CRecordset::none);
//如果用户记录存在,则进行修改操作
if(m_UserRecordSet.IsOpen() && !m_UserRecordSet.IsEOF())
{
//设置编辑当前记录
m_UserRecordSet.Delete();
//更新完毕,关闭数据库
if(m_UserRecordSet.IsOpen())
m_UserRecordSet.Close();
//提示用户,修改成功
AfxMessageBox("删除成功!");
}
else //考虑特例,如果操作中用户信息不存在了
{
//关闭数据库
if(m_UserRecordSet.IsOpen())
m_UserRecordSet.Close();
//提示用户
AfxMessageBox("该记录不存在,无法删除!");
return;
}
}
catch(CDBException*e)
{
e->ReportError ();
//e->Delete ();
return;
}
//在ListCtrl中删除当前用户信息
ctl->DeleteItem(m_CurUser);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -