摘要:??? //{{Jiangsheng的垃圾代码(对话框数据交换)class?CDataTypeFieldExChange;//CTextFieldEdit是一个派生于CEdit,绑定到记录集字段的编辑框//lpszFieldName是绑定的字段的名称//vt是绑定的字段的类型
void ?DDX_TextField(CDataTypeFieldExChange* pDX, int nIDC, CTextFieldEdit& rControl,LPCTSTR lpszFieldName,VARTYPE
vt=VT_BSTR);
//DDX_TextField的封装;自动从数据类型获取字段名称:描述/别名/标识字段;并且有简单的验证
void ?DDX_InfoField(CDataTypeFieldExChange* pDX, int nIDC, CTextFieldEdit& rControl);void ?DDX_AliasField(CDataTypeFieldExChange* pDX, int nIDC, CTextFieldEdit& rControl);void ?DDX_IDField(CDataTypeFieldExChange* pDX, int nIDC, CTextFieldEdit& rControl);
void DDX_AliasField(CDataTypeFieldExChange* pDX, int nIDC, CTextFieldEdit& rControl){?DDX_TextField(pDX,nIDC,rControl,pDX->m_pDTC->m_pDataType->m_strAliasField);?switch(pDX->m_pDTC->m_adReason){?case?adRsnAddNew:?case?adRsnUpdate:?case?adRsnDelete:??if(pDX->m_pDX->m_bSaveAndValidate){???CString strText;???rControl.GetWindowText(strText);???if(strText.FindOneOf(T("/\\*?[]\"<>"))!=-1){????CString strTemp;????strTemp.Format(_T("%s不能包含以下字符: / \\ * ? [ ] \" < > : |")?????,pDX->m_pDTC->m_pDataType->m_strAliasField);????::AfxMessageBox(strTemp);????pDX->m_pDX->Fail();???}??}?}}
void DDX_IDField(CDataTypeFieldExChange* pDX, int nIDC, CTextFieldEdit&? rControl){?if(pDX->m_pDX->m_bSaveAndValidate){??TRACE_LINE(_T("Ignore DDX for %s/%s")???,pDX->m_pDTC->m_pDataType->m_strDataType???,pDX->m_pDTC->m_pDataType->m_strIDField???;?}?else{??DDX_TextField(pDX,nIDC,rControl,pDX->m_pDTC->m_pDataType->m_strIDField);?}}
void DDX_InfoField(CDataTypeFieldExChange* pDX, int nIDC, CTextFieldEdit& rControl){?DDX_TextField(pDX,nIDC,rControl,pDX->m_pDTC->m_pDataType->m_strInfoField);?switch(pDX->m_pDTC->m_adReason){?case?adRsnAddNew:?case?adRsnUpdate:?case?adRsnDelete:??if(pDX->m_pDX->m_bSaveAndValidate){???CString strText;???rControl.GetWindowText(strText);???if(strText.IsEmpty()){????CString strTemp;????strTemp.Format(_T("%s不能为空!"),pDX->m_pDTC->m_pDataType->m_strInfoField);????::AfxMessageBox(strTemp);????pDX->m_pDX->Fail();???}???if(strText.FindOneOf(T("/\\*?[]\"<>"))!=-1){????CString strTemp;????strTemp.Format(_T("%s不能包含以下字符: / \\ * ? [ ] \" < > : |",pDX->m_pDTC->m_pDataType-
>m_strInfoField));????::AfxMessageBox(strTemp);????pDX->m_pDX->Fail();???}
??}??else{???if(!pDX->m_pDTC->m_strAddNew.IsEmpty()){????rControl.SetWindowText(pDX->m_pDTC->m_strAddNew);???}??}?}}
void DDX_TextField(CDataTypeFieldExChange* pDX???? , int nIDC???? , CTextFieldEdit& rControl???? ,LPCTSTR lpszFieldName???? ,VARTYPE vt//=VT_BSTR){?FieldsPtr?pFields=pDX->m_pRecordset->Fields;?CString strFieldName(lpszFieldName);?CDataType* pDT=pDX->m_pDTC->m_pDataType;
?CString strVal;?if (!pDX->m_pDX->m_bSaveAndValidate){??switch(pDX->m_pDTC->m_adReason){??case?adRsnAddNew:??case?adRsnUpdate:??case?adRsnDelete:???if(!strFieldName.IsEmpty()){????strVal=g_GetValueString(pFields->Item[lpszFieldName]->Value);???}???else{????ASSERT(FALSE);???}
??}?}?DDX_Control(pDX->m_pDX,nIDC,rControl);?DDX_Text(pDX->m_pDX,nIDC,strVal);
?if(pDX->m_pDX->m_bSaveAndValidate){??switch(pDX->m_pDTC->m_adReason){??case?adRsnAddNew:??case?adRsnUpdate:??case?adRsnDelete:???{????_variant_t varVal;????if(g_SetValueString(varVal,strVal,vt)){?????TRACE_LINE(_T("Set Field %s to %s\n"),lpszFieldName,strVal);?????if(!strFieldName.IsEmpty()){??????pFields->Item[lpszFieldName]->Value=varVal;?????}?????else{??????ASSERT(FALSE);?????}????}???}??}?}?else{??//编辑框的前一个控件是其标题,其文字从数据库中的类型定义获得??CWnd* pStatic=rControl.GetNextWindow(GW_HWNDPREV);??CString strCaption=pDT->GetFieldProperty(lpszFieldName,_T("Caption"));??if(pStatic&&!strCaption.IsEmpty()){???pStatic->SetWindowText(strCaption);??}??rControl.SetClientTipText(pDT->GetFieldProperty(lpszFieldName,_T("Comments")));?}
}??? //}}End......[
阅读全文]