📄 datadlg.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 + -