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

📄 mylistview.cpp

📁 一个非常不错的MFC ODBC范例
💻 CPP
字号:
// MyListView.cpp : implementation file
//

#include "stdafx.h"
#include "MyMFCODBCSmpl.h"
#include "MyListView.h"
#include "ProductOrderSet.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CMyListView

IMPLEMENT_DYNCREATE(CMyListView, CListView)

CMyListView::CMyListView()
{
}

CMyListView::~CMyListView()
{
}


BEGIN_MESSAGE_MAP(CMyListView, CListView)
	//{{AFX_MSG_MAP(CMyListView)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMyListView drawing

void CMyListView::OnDraw(CDC* pDC)
{
	CDocument* pDoc = GetDocument();
	// TODO: add draw code here
}

/////////////////////////////////////////////////////////////////////////////
// CMyListView diagnostics

#ifdef _DEBUG
void CMyListView::AssertValid() const
{
	CListView::AssertValid();
}

void CMyListView::Dump(CDumpContext& dc) const
{
	CListView::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CMyListView message handlers

void CMyListView::EraseList()
{
	CListCtrl& ctlList = GetListCtrl();
	//删除所有记录行
	ctlList.DeleteAllItems();
	//删除所有表头列
	while(ctlList.DeleteColumn(0));
	UpdateWindow();
}

BOOL CMyListView::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext) 
{
	//设置列表视为REPORT风格
	dwStyle |= LVS_REPORT;
	return CWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);
}

void CMyListView::AddColTitle(int nType)
{
	EraseList();
	CListCtrl& MyListCtrl = this->GetListCtrl();
	if(nType == 0)//当前对象为产品分类
	{
		MyListCtrl.InsertColumn(0,"产品",LVCFMT_LEFT,100);
	}
	else//当前对象为产品
	{
		MyListCtrl.InsertColumn(0,"产品",LVCFMT_LEFT,100);
		MyListCtrl.InsertColumn(1,"类别",LVCFMT_LEFT,100);
		MyListCtrl.InsertColumn(2,"定购日期",LVCFMT_LEFT,100);
		MyListCtrl.InsertColumn(3,"定购数量",LVCFMT_LEFT,100);
		MyListCtrl.InsertColumn(4,"单价",LVCFMT_LEFT,100);
		MyListCtrl.InsertColumn(5,"单位",LVCFMT_LEFT,100);
		MyListCtrl.InsertColumn(6,"折扣",LVCFMT_LEFT,100);
		MyListCtrl.InsertColumn(7,"分类描述",LVCFMT_LEFT,100);
	}
}
int nDebut = 0;
//响应左面视图消息
void CMyListView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint) 
{
	//第一次还没有选中一对象,因此不显示属性
	if( !nDebut ) 
	{
		nDebut = 1;return;
	}
	WPARAM wParam;LPARAM lParam;
	wParam = lHint%10; lParam = lHint/10;
	AddColTitle(wParam);

	int	  nItem = 0;
	char  strNum[20];
	CListCtrl& MyListCtrl = this->GetListCtrl();
	CDatabase db;
	if( !db.Open(_T("MyNWind"))) return;

	CProductOrderSet* pPrdtOrderSet = new CProductOrderSet(&db);
	char strID[10];
 	_itoa(lParam,strID,10);
	CString strFilter = _T("");

	if( wParam == 0 )
		strFilter = CString("CategoryID = ");		
	else
		strFilter = CString("ProductID = ");
	//根据ID进行过滤
	pPrdtOrderSet->m_strFilter = strFilter + strID ;

	if( !pPrdtOrderSet->IsOpen() )
		pPrdtOrderSet->Open();

	if( !pPrdtOrderSet->IsBOF() )
		pPrdtOrderSet->MoveFirst();
	//读出所有相应记录并显示到列表视图
	while(!pPrdtOrderSet->IsEOF())
	{
		CString strPrdtName = pPrdtOrderSet->m_ProductName;
		nItem = MyListCtrl.InsertItem( nItem,
				   strPrdtName.GetBuffer(strPrdtName.GetLength()));
		if(nItem == -1) break;
		MyListCtrl.SetItemText(nItem,1,pPrdtOrderSet->m_CategoryName);
		_itoa(pPrdtOrderSet->m_Quantity,strNum,10);
		MyListCtrl.SetItemText(nItem,3,strNum);
		nItem++;
		pPrdtOrderSet->MoveNext();
	}
	pPrdtOrderSet->Close();
	delete pPrdtOrderSet;	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -