📄 stuactive.cpp
字号:
// StuActive.cpp : implementation file
//
#include "stdafx.h"
#include "StudentCheck.h"
#include "StuActive.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define COLNUM 12 // 11是记录的属性数目
/////////////////////////////////////////////////////////////////////////////
// CStuActive dialog
CStuActive::CStuActive(CWnd* pParent /*=NULL*/)
: CDialog(CStuActive::IDD, pParent)
{
//{{AFX_DATA_INIT(CStuActive)
//}}AFX_DATA_INIT
m_DepInfo.LoadDep();
m_CurAdo.InitialDB();
m_AllStuInfos.GetAllDBInfo();
//初始化数组iCheck
for(int j=0 ; j<SIZE ;j++)
iCheck[j]=0;
//修改时的标识
for(int i=0 ; i<MODSIZE ;i++)
iModyCheck[i]=0; //视图中的标识
for(int k=0 ; k<MODSIZE ;k++)
iModyCheckBase[k]=0; //原数据库中的标识
}
CStuActive::~CStuActive()
{
m_CurAdo.ClosedDB();
}
void CStuActive::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CStuActive)
DDX_Control(pDX, IDC_COMBO1, m_cmbAct);
DDX_Control(pDX, IDC_MEMBER_LIST, m_StuActList);
DDX_Control(pDX, IDC_CLASS_TREE, m_StuActTree);
DDX_Control(pDX, IDC_COMBO24, m_cmbType);
DDX_Control(pDX, IDC_DATETIMEPICKER1, m_dateAct);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CStuActive, CDialog)
//{{AFX_MSG_MAP(CStuActive)
ON_NOTIFY(TVN_SELCHANGED, IDC_CLASS_TREE, OnSelchangedClassTree)
ON_BN_CLICKED(IDC_ADD_ACTIVE, OnAddActive)
ON_CBN_EDITCHANGE(IDC_COMBO1, OnEditchangeCombo1)
ON_CBN_EDITCHANGE(IDC_COMBO24, OnEditchangeCombo2)
ON_NOTIFY(HDN_ITEMCLICK, IDC_MEMBER_LIST, OnItemclickMemberList)
ON_NOTIFY(NM_CLICK, IDC_MEMBER_LIST, OnClickMemberList)
ON_BN_CLICKED(IDC_All_CHECK, OnAllCHECK)
ON_BN_CLICKED(IDC_SAVE_DATA, OnSaveData)
ON_CBN_SELCHANGE(IDC_COMBO1, OnSelchangeCombo1)
ON_CBN_DROPDOWN(IDC_COMBO1, OnDropdownCombo1)
ON_BN_CLICKED(IDC_All_CHECK2, OnAllNotCheck)
ON_BN_CLICKED(IDC_EXIT, OnExit)
ON_BN_CLICKED(IDC_QUERY, OnQuery)
ON_BN_CLICKED(IDC_MODIFY, OnModify)
ON_NOTIFY(NM_CLICK, IDC_CLASS_TREE, OnClickClassTree)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CStuActive message handlers
BOOL CStuActive::OnInitDialog()
{
CDialog::OnInitDialog();
CString strCurName;
if(!(m_DepImageInfo.Create(IDB_BITMAP1,16,1,RGB(0,255,0))))
AfxMessageBox("图像列表创建出错!");
m_StuActTree.SetImageList(&m_DepImageInfo,TVSIL_NORMAL);
HTREEITEM htRoot;
CString strRoot = "环境学院";
htRoot = m_StuActTree.InsertItem(strRoot); //添加根节点
m_StuActTree.SetItemData(htRoot,0);
m_DepInfo.CreatTree(htRoot, m_StuActTree);
m_StuActTree.Expand(htRoot, TVE_EXPAND);
ReadToComb(); //把活动名称丛数据库读进Combox
ConstructTableName(); //设置列表框表头
//初始化活动类型列表框
m_cmbType.AddString("可参加活动");
m_cmbType.AddString("必参加活动");
m_cmbType.SetItemData(0,0); //数据库中可参加活动的ID为0
m_cmbType.SetItemData(1,1); //数据库中必参加活动的ID为1
//设置日期
m_StuActList.SetExtendedStyle(LVS_EX_FULLROWSELECT| LVS_EX_GRIDLINES |LVS_EX_CHECKBOXES);
return TRUE;
}
void CStuActive::ConstructTableName()
{
CArray <CString, LPCTSTR> TableNameAry;
CString * pCurTableName = NULL;
UINT nCurUINT = IDS_COL_NAME_ID;
TableNameAry.SetSize(COLNUM);
pCurTableName = TableNameAry.GetData();
for (int i = 0; i < COLNUM; i++)
{
pCurTableName[i].LoadString(nCurUINT + i);
}
int j;
for (j = 0; j < COLNUM; j++)
{
m_StuActList.InsertColumn(j, pCurTableName[j], LVCFMT_LEFT, 100);
}
for (j = 0; j < COLNUM; j++)
{
m_StuActList.SetColumnWidth(j, 90);
}
}
void CStuActive::OnSelchangedClassTree(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
*pResult = 0;
HTREEITEM hCurItem;
HTREEITEM hCurChildItem;
CString strCurClassID;
hCurItem = m_StuActTree.GetSelectedItem();
if (NULL != hCurItem)
{
hCurChildItem = m_StuActTree.GetChildItem(hCurItem);
if (NULL == hCurChildItem) // 若某一个节点,其孩子为空,说明其为根节点,可以使用查询语句寻找具体信息
{
// 如果当前的所选择的叶子节点发生了变化,那么就修改当前查询语句 m_strCurQuaryInfo
// 并且发送消息,导致整个对话框发生刷新
strCurClassID.Format("%d", m_StuActTree.GetItemData(hCurItem));
m_ClassID=strCurClassID; //把当前班级ID赋值给成员变量
//当前选择的是班级,控制显示表头 SetTtitleTree();
ModityCurQueryMessage(strCurClassID);
}
}
}
void CStuActive::ModityCurQueryMessage(CString _strCurClassID)
{
//传进来的是班级号 通过该号码对班级成员进行检索
CString strStandInfo;
CString strQuotationMark;
strStandInfo.LoadString(IDS_STANDARD_STU_QUERY);
strQuotationMark.LoadString(IDS_QUOTATION_MARK);
m_strCurQuaryInfo = strStandInfo + strQuotationMark + _strCurClassID + strQuotationMark;
// AfxMessageBox(m_strCurQuaryInfo);
RefreshData();
}
void CStuActive::RefreshData()
{
//刷新,这里用了一个很笨的方法:全部重新查询
//比较好的办法是有针对性的查询
//或者是有针对性的修改当前显示
//时间关系,采用最简单的方式和方法进行
UpdateData(TRUE);
m_StuActList.DeleteAllItems();
CArray <CString, LPCTSTR> StudentInfoAry;
CString strCurColInfo;
StudentInfoAry.SetSize(COLNUM);
CString * pCurInfo = StudentInfoAry.GetData();
int nRecordNum = 0;
// 如果记录集不为空
_RecordsetPtr CurRecordset;
_variant_t nIndex = (long)0;
_variant_t var;
CString strCollege="环境学院"; //把03给替换掉
CurRecordset = m_CurAdo.GetRecordSet(LPCTSTR(m_strCurQuaryInfo));
while (0 == CurRecordset->adoEOF)
{
//取一条记录付值给数组StudentInfoAry
for (int i = 0; i < COLNUM; i++)
{
nIndex = (long) i;
var = CurRecordset->GetCollect(nIndex);
pCurInfo[i] = (LPCTSTR)(_bstr_t )var;
}
m_StuActList.InsertItem(nRecordNum, "");
for (int j = 0; j < COLNUM; j++)
{
pCurInfo[j] = m_AllStuInfos.GetNum(pCurInfo[j]);
if (7==j)
pCurInfo[j]=strCollege; //修改学院
if (j==1) //学生号
m_StuActList.SetItemData(nRecordNum,atoi(pCurInfo[j]));
m_StuActList.SetItemText(nRecordNum, j, pCurInfo[j]);
}
nRecordNum ++;
//记录转下一条
CurRecordset->MoveNext();
}
}
void CStuActive::OnAddActive()
{
// TODO: Add your control notification handler code here
CActive dlg;
dlg.DoModal();
}
void CStuActive::OnEditchangeCombo1()
{
// TODO: Add your control notification handler code here
}
void CStuActive::ReadToComb()
{
//把数据库中的活动名称和ID号读进控件中
_bstr_t vSQL;
CString str1,str2;
int i=0;
sa_ActID.RemoveAll();
sa_ActName.RemoveAll();
m_cmbAct.ResetContent();
//执行SELETE语句
vSQL="select ActID, ActName from Activity order by ActID";
m_CurAdo.GetRecordSet(vSQL);
_RecordsetPtr m_pRecordset ;
m_pRecordset = m_CurAdo.GetRecordSet(vSQL);
//获取记录集中的数据
while (m_pRecordset->adoEOF == 0)
{
sa_ActID.Add((LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("ActID"));
sa_ActName.Add((LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("ActName"));
m_cmbAct.AddString(sa_ActName.GetAt(i));
i++;
m_pRecordset->MoveNext();
}
for(int j=0 ; j< sa_ActID.GetSize() ;j++)
{
m_cmbAct.SetItemData(j,atoi(sa_ActID.GetAt(j))) ;
}
}
void CStuActive::OnEditchangeCombo2()
{
// TODO: Add your control notification handler code here
}
void CStuActive::OnItemclickMemberList(NMHDR* pNMHDR, LRESULT* pResult)
{
HD_NOTIFY *phdn = (HD_NOTIFY *) pNMHDR;
// TODO: Add your control notification handler code here
*pResult = 0;
}
void CStuActive::OnClickMemberList(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
HD_NOTIFY *phdn = (HD_NOTIFY *) pNMHDR;
//若鼠标没有点击listCtrl中的项,则不执行以下操作
CString str1;
// iQueryNot=phdn->iItem;
// str1.Format("%d",iQueryNot);
// AfxMessageBox(str1);
if (phdn->iItem < 0)
return;
CString strTemp;
strTemp.Format("%d", m_StuActList.GetItemData(phdn->iItem));
//
if ( strTemp.GetLength()>8 )
{
//获的是学号,标识为非查询
//保存按钮时,对列表复选框的操作
if (iCheck[phdn->iItem])
{
iCheck[phdn->iItem] = 0;
m_StuActList.SetCheck(phdn->iItem, FALSE);
}
else
{
iCheck[phdn->iItem] = 1;
m_StuActList.SetCheck(phdn->iItem);
}
}
else
{
//获的ID,标识查询
//修改按钮时,对列表复选框的操作
//若修改,要通知查询,已经修改,
if (iModyCheck[phdn->iItem]) //为的是和查询数据库里的做对比
{ //记录变化的数据,以便用来更新
iModyCheck[phdn->iItem] = 0;
m_StuActList.SetCheck(phdn->iItem, FALSE);
}
else
{
iModyCheck[phdn->iItem] = 1;
m_StuActList.SetCheck(phdn->iItem);
}
}
*pResult = 0;
}
void CStuActive::OnAllCHECK()
{
//把所有的边框全部选择
//首先在listCtrl里显示选择项
for (int nCount= 0; nCount<m_StuActList.GetItemCount();nCount++)
{
if(!iCheck[nCount])
{
iCheck[nCount] = 1;
m_StuActList.SetCheck(nCount);
}
}
}
void CStuActive::OnSaveData()
{
//获取当前选择的项的值,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -