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

📄 datadlg.cpp

📁 内容包括从VC++的基本范例到项目开发的许多典型的例子。是VC++初学者不可多得的好资料
💻 CPP
字号:
// DataDlg.cpp : implementation file
//

#include "stdafx.h"
#include "ExMIS.h"
#include "DataDlg.h"

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

/////////////////////////////////////////////////////////////////////////////
// CDataDlg dialog

//状态栏,字符串
static UINT indicators[] =
{
	IDS_STATUS_DATA,		//添加的自定义自符串
	ID_SEPARATOR,           // status line indicator
	ID_INDICATOR_CAPS,
	ID_INDICATOR_NUM,
	ID_INDICATOR_SCRL,
	IDS_STATUS_SPACE,				//加空格
};

CDataDlg::CDataDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CDataDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDataDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT

	m_TreeBootImage.Create (IDB_BITMAP_TREE,20,1,ILC_COLOR32);
}


void CDataDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDataDlg)
	DDX_Control(pDX, IDC_LIST, m_ctrlList);
	DDX_Control(pDX, IDC_TREE, m_ctrlTree);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CDataDlg, CDialog)
	//{{AFX_MSG_MAP(CDataDlg)
	ON_NOTIFY(TVN_SELCHANGED, IDC_TREE, OnSelchangedTree)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDataDlg message handlers

BOOL CDataDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	//添加工具栏和状态栏
	CRect	rect;
	GetClientRect(rect);
	
	m_wndToolBar.Create(this);
	m_wndToolBar.LoadToolBar(IDR_MENU_DATA);

	m_wndStatusBar.Create(this);
	m_wndStatusBar.SetIndicators(indicators,sizeof(indicators)/sizeof(UINT));
	m_wndStatusBar.SetPaneStyle(2,SBPS_STRETCH);

	m_wndToolBar.MoveWindow(0,0,rect.right,48);
	m_wndStatusBar.MoveWindow(0,rect.bottom-20,rect.right,20);


	//初始化树形控件,设置图标
	m_ctrlTree.SetImageList(&m_TreeBootImage,TVSIL_NORMAL);
	//删除所有结点控件中的项目
	m_ctrlTree.DeleteAllItems();
	//添加根结点即各个表的信息
	HTREEITEM hStudent=m_ctrlTree.InsertItem("学生基本信息",0,2,TVI_ROOT,TVI_LAST);	
	HTREEITEM hTeacher=m_ctrlTree.InsertItem("教师基本信息",0,2,TVI_ROOT,TVI_LAST);
	HTREEITEM hCollege=m_ctrlTree.InsertItem("院系基本信息",0,2,TVI_ROOT,TVI_LAST);
	HTREEITEM hCourse=m_ctrlTree.InsertItem("课程基本信息",0,2,TVI_ROOT,TVI_LAST);
	HTREEITEM hScore=m_ctrlTree.InsertItem("学生成绩信息",0,2,TVI_ROOT,TVI_LAST);	

	//打开院系数据集,枚举所有院系
	m_pRS.ADOOpen();
	m_pRS.ADOExcute("SELECT CollegeName FROM CollegeTab");
	//添加各个子结点,即将每个表按院系分类
	AddTreeNodes(hStudent);
	m_pRS.MoveFirst();
	AddTreeNodes(hTeacher);
	m_pRS.MoveFirst();
	AddTreeNodes(hCollege);
	m_pRS.MoveFirst();
	AddTreeNodes(hCourse);
	m_pRS.MoveFirst();
	AddTreeNodes(hScore);

	//设置列表控件的样式
	m_ctrlList.ModifyStyle(0,LVS_REPORT|LVS_SHOWSELALWAYS|LVS_SINGLESEL);
	m_ctrlList.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_HEADERDRAGDROP);
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

//将当前数据集的第一个字段的值全部加入指定结点下
void CDataDlg::AddTreeNodes(HTREEITEM hParent)
{
	while(!m_pRS.ADOEOF())
	{
		m_ctrlTree.InsertItem(m_pRS.GetFieldString(0),1,2,hParent,TVI_LAST);	
		m_pRS.MoveNext();
	}
}

void CDataDlg::OnSelchangedTree(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
	// TODO: Add your control notification handler code here
	
	*pResult = 0;

	//添加的代码
	HTREEITEM hItem;
	HTREEITEM hSelItem=m_ctrlTree.GetSelectedItem();
	HTREEITEM hParentItem=m_ctrlTree.GetParentItem(hSelItem);		
	
	//判断选中的的是根节点,还是学院二级子节点。并取回根节点
	CString strSql,str,strCondition;	//SQL语句
	if(hParentItem!=NULL)
	{
		//选中的是院系结点,添加过滤条件
		strCondition.Format(" Where CollegeID='%s'",m_ctrlTree.GetItemText(hSelItem));
		hItem=hParentItem;		
	}else{
		//选中的是根节结点,没有过滤条件
		strCondition="";
		hItem=hSelItem;
	}
	
	str=m_ctrlTree.GetItemText(hItem);	
	
	if(str=="学生基本信息")
		strSql="SELECT * FROM StudentTab" ;
	if(str=="教师基本信息")
		strSql="SELECT * FROM TeacherTab" ;
	if(str=="院系基本信息")
		strSql="SELECT * FROM CollegeTab" ;
	if(str=="课程基本信息")
		strSql="SELECT * FROM CourseTab" ;
	if(str=="学生成绩信息")
		strSql="SELECT * FROM ScoreTab" ;
	//加上筛选条件
	strSql+=strCondition;
	//提取数据集
	m_pRS.ADOExcute(strSql);
	AddListItems();
}

void CDataDlg::AddListItems()
{
	//清列表框的头
	int nCount=0;
	CHeaderCtrl *pHeaderCtrl=m_ctrlList.GetHeaderCtrl();
	if(pHeaderCtrl!=NULL)
		nCount=pHeaderCtrl->GetItemCount();
	for(int i=0;i<nCount;i++)
		m_ctrlList.DeleteColumn(0);
	m_ctrlList.DeleteAllItems();
	
	//取出字段名显示到列表头中
	for(i=0;i<m_pRS.nFieldCols;i++)
	{
		m_ctrlList.InsertColumn(i,m_pRS.GetFieldName(i),LVCFMT_LEFT,110);
	}	

	//取出字段值放到列表行中
	int nItem=0;
	while(!m_pRS.ADOEOF())
	{
		m_ctrlList.InsertItem(nItem,m_pRS.GetFieldString(0));
		for(int i=1;i<m_pRS.nFieldCols;i++)
			m_ctrlList.SetItemText(nItem,i,m_pRS.GetFieldString(i));		

		m_pRS.MoveNext();
	}
}

⌨️ 快捷键说明

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