📄 dossierdlg.cpp
字号:
(CButton*)GetDlgItem(IDC_DOSS_DEL)->EnableWindow(0); //删除不可用
(CButton*)GetDlgItem(IDC_DOSS_MODIFY)->EnableWindow(0); //修改不可用
(CButton*)GetDlgItem(IDC_DOSS_SAVE)->EnableWindow(0); //保存不可用
(CButton*)GetDlgItem(IDC_DOSS_ABOLISH)->EnableWindow(1); //取消可用
m_strName.Empty(); //清空名称编辑框内容准备添加
m_strRemark.Empty(); //清空备注编辑框内容准备添加
UpdateData(0);
m_CtrlEditName.SetFocus(); //将光标停留在名称编辑框
}
void CDossierDlg::OnDossModify()
{
m_strFlag="修改"; //将标志变量内容变为“添加”
(CEdit*)GetDlgItem(IDC_DOSS_NAME)->EnableWindow(1); //名称编辑框可用
(CEdit*)GetDlgItem(IDC_DOSS_REMARK)->EnableWindow(1); //备注编辑框可用
(CButton*)GetDlgItem(IDC_DOSS_ADD)->EnableWindow(0); //添加不可用
(CButton*)GetDlgItem(IDC_DOSS_MODIFY)->EnableWindow(0); //修改不可用
(CButton*)GetDlgItem(IDC_DOSS_DEL)->EnableWindow(0); //删除不可用
(CButton*)GetDlgItem(IDC_DOSS_SAVE)->EnableWindow(1); //保存可用
(CButton*)GetDlgItem(IDC_DOSS_ABOLISH)->EnableWindow(1); //取消可用
m_CtrlEditName.SetFocus(); //将光标停留在名称编辑框
}
void CDossierDlg::OnDossSave()
{
//检测DAO数据库对象的有效性,并在记录集对象打开时关闭该记录集
if(!m_pDatabase->IsOpen()) return;
if(!m_pRecordset) return;
if(m_pRecordset->IsOpen()) m_pRecordset->Close();
UpdateData(1); //将控件中的内容保存到控件对于的变量里
if(m_strName.IsEmpty()) //保证名称编辑框控件中的内容不能为空
{
AfxMessageBox(m_strField+"不能为空!");
m_CtrlEditName.SetFocus();
return;
}
//提示对话框,询问是否确认“保存”或“修改”
CPromptDlg dlg;
dlg.m_Prompt=("\n"+m_strFlag+"该记录?");
if(dlg.DoModal()==IDCANCEL)
return;
CString strSql,FieldID;
FieldID=m_strTableName+"ID"; //构造数据库第一个字段名称
if(m_strFlag=="添加")
{
strSql.Format("insert into %s(%s,备注) values('%s','%s')",m_strTableName,m_strField,m_strName,m_strRemark);
try{
if(m_pDatabase->CanUpdate()) //如果数据库可以更新,执行数据库添加操作
{
m_pDatabase->Execute(strSql, dbDenyWrite|dbFailOnError);
}
}
//如果名称出现重复,程序执行catch函数,通过提示对话框对用户进行提示,同时清空名称编辑框内容
catch(CDaoException* e){
MessageBox(m_strField+"不能重复!\n请重新输入"+m_strTableName,"添加提示");
e->Delete();
m_strName.Empty();
m_CtrlEditName.SetFocus(); //将光标置于名称编辑框处
UpdateData(0);
(CButton*)GetDlgItem(IDC_DOSS_SAVE)->EnableWindow(0);
return;
}
Refresh(); //调用Refresh函数
//将新加的条目变为选中状态
nSelectIndex=m_CtrlList.GetItemCount()-1; //得到新加条目的索引值
m_CtrlList.EnsureVisible(nSelectIndex,nSelectIndex+1); //使新加条目可见
m_CtrlList.SetItemState(nSelectIndex, LVIS_SELECTED, LVIS_SELECTED); //使条目处于选中状态
}
if(m_strFlag=="修改")
{
int nTempIndex=nSelectIndex; //变量nTempIndex用于保存选择条目的索引值
strSql.Format("update %s set %s='%s',备注='%s' where %s=%d",m_strTableName,m_strField,m_strName,m_strRemark,FieldID,atoi(m_strID));
try{
if(m_pDatabase->CanUpdate())
{
m_pDatabase->Execute(strSql, dbDenyWrite|dbFailOnError);
}
}
catch(CDaoException* e){
MessageBox(m_strField+"不能重复!","修改提示");
m_strName=m_CtrlList.GetItemText(nSelectIndex,1);
m_CtrlEditName.SetFocus();
UpdateData(0);
(CButton*)GetDlgItem(IDC_DOSS_SAVE)->EnableWindow(0);
return;
e->Delete();}
Refresh(); //调用Refresh函数
m_CtrlList.EnsureVisible(nSelectIndex,nSelectIndex+1); //使新加条目可见
m_CtrlList.SetItemState(nSelectIndex, LVIS_SELECTED, LVIS_SELECTED); //使条目处于选中状态
}
(CEdit*)GetDlgItem(IDC_DOSS_NAME)->EnableWindow(0); //名称编辑框不可用
(CEdit*)GetDlgItem(IDC_DOSS_REMARK)->EnableWindow(0); //备注编辑框不可用
(CButton*)GetDlgItem(IDC_DOSS_ADD)->EnableWindow(1); //添加可用
(CButton*)GetDlgItem(IDC_DOSS_MODIFY)->EnableWindow(1); //修改可用
(CButton*)GetDlgItem(IDC_DOSS_DEL)->EnableWindow(1); //删除可用
(CButton*)GetDlgItem(IDC_DOSS_SAVE)->EnableWindow(0); //保存不可用
(CButton*)GetDlgItem(IDC_DOSS_ABOLISH)->EnableWindow(0); //取消不可用
}
void CDossierDlg::OnDossDel()
{
//检测DAO数据库对象的有效性,并在记录集对象打开时关闭该记录集
if(!m_pDatabase->IsOpen()) return;
if(!m_pRecordset) return;
if(m_pRecordset->IsOpen()) m_pRecordset->Close();
//检测预删除的条目是否与其他数据表相关联
CString strSql,FieldID;
FieldID=m_strTableName+"ID"; //构造数据库中表的字段名称
bool DelFlag=0; //用于标识该条目是否与其他表关联,如果关联其值为true
CString sql;
//首先检测是否与表“资产信息”关联
sql.Format("Select %s From 资产信息 where %s=%d",FieldID,FieldID,atoi(m_strID));
try{
m_pRecordset->Open(dbOpenDynaset,sql);
while (!m_pRecordset->IsEOF())
{
DelFlag=1; //如果关联,DelFlag变为true,跳出循环
break;
}
m_pRecordset->Close();
}
catch(CDaoException* e){
e->Delete();}
//检测是否与表“借出还入资产”相关联
if(m_strTableName=="部门")
{
sql.Format("Select 借用部门ID From 借出还入资产 where 借用部门ID=%d",atoi(m_strID));
try{
m_pRecordset->Open(dbOpenDynaset,sql);
while (!m_pRecordset->IsEOF())
{
DelFlag=1;
break;
}
m_pRecordset->Close();
}
catch(CDaoException* e){
e->Delete();}
}
//检测是否与表“清理资产”相关联
if(m_strTableName=="清理方式")
{
sql.Format("Select 清理方式ID From 清理资产 where 清理方式ID=%d",atoi(m_strID));
try{
m_pRecordset->Open(dbOpenDynaset,sql);
while (!m_pRecordset->IsEOF())
{
DelFlag=1;
break;
}
m_pRecordset->Close();
}
catch(CDaoException* e){
e->Delete();}
}
//提示是否确定删除该条目
CPromptDlg dlg;
//如果该条目与其他表相联系,给出警告提示
if(DelFlag)
dlg.m_Prompt.Format("有其他项与该项相关联,删除后所有与该项相关联的记录都将被标识为“!!删除!!”,是否继续删除?");
else
dlg.m_Prompt=("\n删除该记录?");
if(dlg.DoModal()==IDCANCEL)
return;
strSql.Format("delete from %s where %s=%d",m_strTableName,FieldID,atoi(m_strID));
try{
if(m_pDatabase->CanUpdate())
m_pDatabase->Execute(strSql, dbDenyWrite|dbConsistent);
}
catch(CDaoException* e){
e->ReportError();
e->Delete();}
Refresh();
//使删除条目的下一条变为选中状态
if(nSelectIndex==m_CtrlList.GetItemCount())
nSelectIndex--;
m_CtrlList.EnsureVisible(nSelectIndex,nSelectIndex+5);
m_CtrlList.SetItemState(nSelectIndex, LVIS_SELECTED, LVIS_SELECTED);
}
void CDossierDlg::OnChangeDossName()
{
UpdateData(1); //将控件中的内容保存的与控件对应的变量里
//目前处于添加或修改状态且名称编辑框不为空时“保存”按钮可用
if((m_strFlag=="添加"||m_strFlag=="修改")&&m_strName.IsEmpty()==0)
(CButton*)GetDlgItem(IDC_DOSS_SAVE)->EnableWindow(1);
else
(CButton*)GetDlgItem(IDC_DOSS_SAVE)->EnableWindow(0);
}
void CDossierDlg::OnDossAbolish()
{
//如果列表框控件中没有条目被选中
if(nSelectIndex==-1)
{
Refresh();
(CButton*)GetDlgItem(IDC_DOSS_ADD)->EnableWindow(1);
(CButton*)GetDlgItem(IDC_DOSS_SAVE)->EnableWindow(0);
(CButton*)GetDlgItem(IDC_DOSS_MODIFY)->EnableWindow(0);
(CButton*)GetDlgItem(IDC_DOSS_DEL)->EnableWindow(0);
(CButton*)GetDlgItem(IDC_DOSS_ABOLISH)->EnableWindow(0);
(CEdit*)GetDlgItem(IDC_DOSS_NAME)->EnableWindow(0);
(CEdit*)GetDlgItem(IDC_DOSS_REMARK)->EnableWindow(0);
}
//如果有条目被选中
else
{
m_CtrlList.EnsureVisible(nSelectIndex,nSelectIndex+5);
m_CtrlList.SetItemState(nSelectIndex, LVIS_SELECTED, LVIS_SELECTED);
(CButton*)GetDlgItem(IDC_DOSS_ADD)->EnableWindow(1);
(CButton*)GetDlgItem(IDC_DOSS_SAVE)->EnableWindow(0);
(CButton*)GetDlgItem(IDC_DOSS_MODIFY)->EnableWindow(1);
(CButton*)GetDlgItem(IDC_DOSS_DEL)->EnableWindow(1);
(CButton*)GetDlgItem(IDC_DOSS_ABOLISH)->EnableWindow(0);
(CEdit*)GetDlgItem(IDC_DOSS_NAME)->EnableWindow(0);
(CEdit*)GetDlgItem(IDC_DOSS_REMARK)->EnableWindow(0);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -