?? 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 + -