📄 adoadrbookview.cpp
字号:
// AdoAdrBookView.cpp : implementation of the CAdoAdrBookView class
/*
This file was created by Haimag (haimag@263.net).
This file is distributed "as is", e.g. there are no warranties
and obligations and you could use it in your applications on your
own risk.
Your comments and questions are welcome.
*/
#include "stdafx.h"
#include "AdoAdrBook.h"
#include "AdoAdrBookDoc.h"
#include "AdoAdrBookView.h"
#include "UserSheet.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAdoAdrBookView
IMPLEMENT_DYNCREATE(CAdoAdrBookView, CListView)
BEGIN_MESSAGE_MAP(CAdoAdrBookView, CListView)
//{{AFX_MSG_MAP(CAdoAdrBookView)
ON_COMMAND(ID_DELETE_RECORD, OnDeleteRecord)
ON_UPDATE_COMMAND_UI(ID_DELETE_RECORD, OnUpdateDeleteRecord)
ON_COMMAND(ID_UPDATA_RECORD, OnUpdataRecord)
ON_UPDATE_COMMAND_UI(ID_UPDATA_RECORD, OnUpdateUpdataRecord)
ON_WM_LBUTTONDBLCLK()
ON_COMMAND(ID_REFRASH_RECORD, OnRefrashRecord)
ON_COMMAND(ID_NEW_RECORD, OnNewRecord)
ON_WM_RBUTTONDOWN()
ON_COMMAND(ID_POP_DELETE, OnPopDelete)
ON_COMMAND(ID_POP_UPDATA, OnPopUpdata)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CListView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CListView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CListView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CAdoAdrBookView construction/destruction
CString CAdoAdrBookView::m_ColumnLabelStr [] =
{
"Name",
"Address",
"EmailAddress",
"WorkPhone",
"HomePhone",
};
CAdoAdrBookView::CAdoAdrBookView()
{
// TODO: add construction code here
m_pUserSet.CreateInstance(__uuidof(Recordset));
}
CAdoAdrBookView::~CAdoAdrBookView()
{
if(m_pImageList!=NULL) delete m_pImageList;
}
BOOL CAdoAdrBookView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
cs.style |= LVS_REPORT |
LVS_SINGLESEL |
LVS_SHOWSELALWAYS |
LVS_ICON ;
return CListView::PreCreateWindow(cs);
return CListView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CAdoAdrBookView drawing
void CAdoAdrBookView::OnDraw(CDC* pDC)
{
CAdoAdrBookDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
}
void CAdoAdrBookView::OnInitialUpdate()
{
CListView::OnInitialUpdate();
CAdoAdrBookDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CListCtrl &lc = GetListCtrl();
int Column;
LV_COLUMN LVColumn;
DWORD dwStyle = ListView_GetExtendedListViewStyle(GetListCtrl());
//Add the full row select and grid line style to the existing extended styles
dwStyle |= LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES |
LVS_EX_HEADERDRAGDROP | LVS_EX_TRACKSELECT;
ListView_SetExtendedListViewStyle (GetListCtrl(),dwStyle);
lc.DeleteAllItems ();// regular cleanup
m_pImageList = new CImageList();
m_pImageList->Create(IDB_BITMAP2, 16, 1, RGB(0,0,0));
GetListCtrl().SetImageList(m_pImageList, LVSIL_SMALL);
LVColumn.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
{
for (Column = 0; (Column < 5); Column++)
{
CString HeaderString;
// fill header data
LVColumn.iSubItem = Column;
LVColumn.pszText = (LPTSTR) (LPCTSTR)m_ColumnLabelStr[Column];
LVColumn.cx = 120;
LVColumn.fmt = LVCFMT_LEFT;
lc.InsertColumn (Column, &LVColumn);
}
}
pDoc->UpdateAllViews(NULL);
}
/////////////////////////////////////////////////////////////////////////////
// CAdoAdrBookView printing
BOOL CAdoAdrBookView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CAdoAdrBookView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CAdoAdrBookView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CAdoAdrBookView diagnostics
#ifdef _DEBUG
void CAdoAdrBookView::AssertValid() const
{
CListView::AssertValid();
}
void CAdoAdrBookView::Dump(CDumpContext& dc) const
{
CListView::Dump(dc);
}
CAdoAdrBookDoc* CAdoAdrBookView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CAdoAdrBookDoc)));
return (CAdoAdrBookDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CAdoAdrBookView message handlers
extern CAdoAdrBookApp theApp;
void CAdoAdrBookView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint)
{
CListCtrl &lc = GetListCtrl();
lc.DeleteAllItems ();
try
{
int index=0;
CString sql = "select * from Data";
m_pUserSet->Open("select * from Data",
theApp.m_pConnection.GetInterfacePtr(),
adOpenDynamic,
adLockOptimistic,
adCmdText);
while (!m_pUserSet->adoEOF)
{
m_pFieldsPtr = m_pUserSet->Fields;
m_pFieldPtr = m_pFieldsPtr->Item["NAME"];
CString str="";
if( m_pFieldPtr->Value.vt==VT_NULL ) str="";
else str.Format( (char *)_bstr_t(m_pFieldPtr->Value) );
int itemIndex = lc.InsertItem(LVIF_TEXT | LVIF_PARAM, index, str, 0, 0, 0, 0);
int SubitemIndex;
for(SubitemIndex=1;SubitemIndex<5;SubitemIndex++)
{
m_pFieldPtr = m_pFieldsPtr->Item[_variant_t(m_ColumnLabelStr[SubitemIndex])];
if( m_pFieldPtr->Value.vt==VT_NULL ) str="";
else str.Format( (char *)_bstr_t(m_pFieldPtr->Value) );
lc.SetItem(itemIndex,SubitemIndex,LVIF_TEXT, str , 0, 0, 0, 0);
}
m_pUserSet->MoveNext();
index++;
}
m_pUserSet->Close();
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}
catch(...)
{
AfxMessageBox("访问数据库服务器时发生异常.\n请与系统管理员联系,谢谢使用.");
return;
}
}
void CAdoAdrBookView::OnDeleteRecord()
{
// TODO: Add your command handler code here
CListCtrl& lc = GetListCtrl ();
int nItem = lc.GetNextItem (-1, LVNI_SELECTED);
if(nItem==-1)
{
AfxMessageBox("请选择要删除的纪录");
return ;
}
try
{
CString sql = "Select * from data where Name = " ;
CString str = lc.GetItemText(nItem, 0);
sql +="'";
sql +=str;
sql+= "'";
if ( (AfxMessageBox("要删除: " +
str+"吗?\n该删除不可恢复!",
MB_YESNO | MB_ICONQUESTION | MB_DEFBUTTON2)) == IDYES )
{
m_pUserSet->Open((_variant_t)sql,
theApp.m_pConnection.GetInterfacePtr(),
adOpenDynamic,
adLockOptimistic,
adCmdText);
m_pUserSet->Delete(adAffectCurrent);
m_pUserSet->Update();
m_pUserSet->Close();
lc.DeleteItem(nItem);
}
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}
catch(...)
{
AfxMessageBox("访问数据库服务器时发生异常.\n请与系统管理员联系,谢谢使用.");
return;
}
}
void CAdoAdrBookView::OnUpdateDeleteRecord(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
CListCtrl& lc = GetListCtrl();
int nItem = lc.GetNextItem (-1, LVNI_SELECTED);
if (nItem == -1) pCmdUI->Enable(0);
}
void CAdoAdrBookView::OnUpdataRecord()
{
CListCtrl& lc = GetListCtrl ();
int nItem = lc.GetNextItem(-1,LVNI_SELECTED);
if(nItem==-1)
{
AfxMessageBox("请选择要更新的纪录");
return ;
}
CUserSheet sheet("个人资料") ;
CString sql = "select * from Data where Name =";
CString str =lc.GetItemText(nItem,0);
sql +="'";
sql +=str;
sql+= "'";
try
{
m_pUserSet->Open((_variant_t)sql,
theApp.m_pConnection.GetInterfacePtr(),
adOpenDynamic,
adLockOptimistic,
adCmdText);
m_pFieldsPtr = m_pUserSet->Fields;
m_pFieldPtr = m_pFieldsPtr->Item["NAME"];
if( m_pFieldPtr->Value.vt==VT_NULL ) str="";
else str.Format( (char *)_bstr_t(m_pFieldPtr->Value) );
sheet.m_UserPage1.m_name = str;
m_pFieldPtr = m_pFieldsPtr->Item["Address"];
if( m_pFieldPtr->Value.vt==VT_NULL ) str="";
else str.Format( (char *)_bstr_t(m_pFieldPtr->Value) );
sheet.m_UserPage1.m_address = str;
m_pFieldPtr = m_pFieldsPtr->Item["HomePhone"];
if( m_pFieldPtr->Value.vt==VT_NULL ) str="";
else str.Format( (char *)_bstr_t(m_pFieldPtr->Value) );
sheet.m_UserPage1.m_homePhone = str;
m_pFieldPtr = m_pFieldsPtr->Item["MobilePhone"];
if( m_pFieldPtr->Value.vt==VT_NULL ) str="";
else str.Format( (char *)_bstr_t(m_pFieldPtr->Value) );
sheet.m_UserPage1.m_mobilePhone = str;
m_pFieldPtr = m_pFieldsPtr->Item["workphone"];
if( m_pFieldPtr->Value.vt==VT_NULL ) str="";
else str.Format( (char *)_bstr_t(m_pFieldPtr->Value) );
sheet.m_UserPage1.m_workPhone = str;
m_pFieldPtr = m_pFieldsPtr->Item["emailaddress"];
if( m_pFieldPtr->Value.vt==VT_NULL ) str="";
else str.Format( (char *)_bstr_t(m_pFieldPtr->Value) );
sheet.m_UserPage1.m_email = str;
m_pFieldPtr = m_pFieldsPtr->Item["Notes"];
if( m_pFieldPtr->Value.vt==VT_NULL ) str="";
else str.Format( (char *)_bstr_t(m_pFieldPtr->Value) );
sheet.m_UserPage2.m_notes = str;
if(sheet.DoModal()==IDOK)
{
m_pFieldPtr = m_pFieldsPtr->Item["NAME"];
str = sheet.m_UserPage1.m_name;
if(str.IsEmpty()) str = " ";
m_pFieldPtr->Value = (_variant_t)str;
m_pFieldPtr = m_pFieldsPtr->Item["workphone"];
str = sheet.m_UserPage1.m_workPhone;
if(str.IsEmpty()) str = " ";
m_pFieldPtr->Value = (_variant_t)str;
m_pFieldPtr = m_pFieldsPtr->Item["Address"];
str = sheet.m_UserPage1.m_address;
if(str.IsEmpty()) str = " ";
m_pFieldPtr->Value = (_variant_t)str;
m_pFieldPtr = m_pFieldsPtr->Item["emailAddress"];
str = sheet.m_UserPage1.m_email;
if(str.IsEmpty()) str = " ";
m_pFieldPtr->Value = (_variant_t)str;
m_pFieldPtr = m_pFieldsPtr->Item["mobilephone"];
str = sheet.m_UserPage1.m_mobilePhone;
if(str.IsEmpty()) str = " ";
m_pFieldPtr->Value = (_variant_t)str;
m_pFieldPtr = m_pFieldsPtr->Item["homephone"];
str = sheet.m_UserPage1.m_homePhone;
if(str.IsEmpty()) str = " ";
m_pFieldPtr->Value = (_variant_t)str;
m_pFieldPtr = m_pFieldsPtr->Item["Notes"];
str = sheet.m_UserPage2.m_notes;
if(str.IsEmpty()) str = " ";
m_pFieldPtr->Value = (_variant_t)str;
m_pUserSet->Update();
m_pUserSet->Close();
GetDocument()->UpdateAllViews(NULL);
}
else
m_pUserSet->Close();
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}
catch(...)
{
AfxMessageBox("访问数据库服务器时发生异常.\n请与系统管理员联系,谢谢使用.");
return;
}
}
void CAdoAdrBookView::OnUpdateUpdataRecord(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
CListCtrl& lc = GetListCtrl ();
int nItem = lc.GetNextItem (-1, LVNI_SELECTED);
if (nItem == -1) pCmdUI->Enable(0);
}
void CAdoAdrBookView::OnLButtonDblClk(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
OnUpdataRecord() ;
CListView::OnLButtonDblClk(nFlags, point);
}
void CAdoAdrBookView::OnRefrashRecord()
{
// TODO: Add your command handler code here
GetDocument()->UpdateAllViews(NULL);
}
void CAdoAdrBookView::OnNewRecord()
{
// TODO: Add your command handler code here
CUserSheet sheet("添加记录");
CListCtrl& lc = GetListCtrl ();
if(sheet.DoModal()!=IDOK) return ;
try
{
CString sql = "select * from data where Name =";
CString str = "'" + sheet.m_UserPage1.m_name +"'";
sql += str;
m_pUserSet->Open((_variant_t)sql,
theApp.m_pConnection.GetInterfacePtr(),
adOpenDynamic,
adLockOptimistic,
adCmdText);
if(!m_pUserSet->adoEOF)
{
m_pUserSet->Close();
AfxMessageBox("此姓名已存在");
return ;
}
m_pUserSet->Close();
m_pUserSet->Open("select * from data",
theApp.m_pConnection.GetInterfacePtr(),
adOpenDynamic,
adLockOptimistic,
adCmdText);
m_pFieldsPtr = m_pUserSet->Fields;
m_pUserSet->AddNew();
{
m_pFieldPtr = m_pFieldsPtr->Item["NAME"];
str = sheet.m_UserPage1.m_name;
if(str.IsEmpty()) str = " ";
m_pFieldPtr->Value = (_variant_t)str;
m_pFieldPtr = m_pFieldsPtr->Item["workphone"];
str = sheet.m_UserPage1.m_workPhone;
if(str.IsEmpty()) str = " ";
m_pFieldPtr->Value = (_variant_t)str;
m_pFieldPtr = m_pFieldsPtr->Item["Address"];
str = sheet.m_UserPage1.m_address;
if(str.IsEmpty()) str = " ";
m_pFieldPtr->Value = (_variant_t)str;
m_pFieldPtr = m_pFieldsPtr->Item["emailAddress"];
str = sheet.m_UserPage1.m_email;
if(str.IsEmpty()) str = " ";
m_pFieldPtr->Value = (_variant_t)str;
m_pFieldPtr = m_pFieldsPtr->Item["mobilephone"];
str = sheet.m_UserPage1.m_mobilePhone;
if(str.IsEmpty()) str = " ";
m_pFieldPtr->Value = (_variant_t)str;
m_pFieldPtr = m_pFieldsPtr->Item["homephone"];
str = sheet.m_UserPage1.m_homePhone;
if(str.IsEmpty()) str = " ";
m_pFieldPtr->Value = (_variant_t)str;
m_pFieldPtr = m_pFieldsPtr->Item["Notes"];
str = sheet.m_UserPage2.m_notes;
if(str.IsEmpty()) str = " ";
m_pFieldPtr->Value = (_variant_t)str;
}
m_pUserSet->Update();
m_pUserSet->Close();
GetDocument()->UpdateAllViews(NULL);
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}
catch(...)
{
AfxMessageBox("访问数据库服务器时发生异常.\n请与系统管理员联系,谢谢使用.");
return;
}
}
void CAdoAdrBookView::OnRButtonDown(UINT nFlags, CPoint point)
{
CMenu PopMenu;
CMenu *pMenu;
CPoint pt;
pt= point ;
PopMenu.LoadMenu(IDR_POP_MENU);
ClientToScreen (&pt);
// show the menu (returns, when menu is closed again!)
pMenu = PopMenu.GetSubMenu (0);
pMenu->TrackPopupMenu (TPM_LEFTALIGN | TPM_RIGHTBUTTON,
pt.x, pt.y, this);
//CListView::OnRButtonDown(nFlags, point);
}
void CAdoAdrBookView::OnPopDelete()
{
// TODO: Add your command handler code here
OnDeleteRecord() ;
}
void CAdoAdrBookView::OnPopUpdata()
{
// TODO: Add your command handler code here
OnUpdataRecord();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -