void PrefixDataField::Dec() { const TCHAR *chars = GetAllowedCharacters(); if (StringIsEmpty(chars)) return; const TCHAR current = GetAsString()[0]; TCHAR next; if (current == _T('\0')) next = chars[_tcslen(chars) - 1]; else { const TCHAR *p = current != _T('\0') ? _tcschr(chars, current) : nullptr; if (p > chars) next = p[-1]; else next = _T('\0'); } const TCHAR new_value[2] = { next, _T('\0') }; SetAsString(new_value); }
//把外部用户输入的数据(字符串形式)保存到字段内,如果成功.则返回true bool CCurrencyField::GetFromDisplay(CTString str) { if(!m_pValue) return false; if(!SetAsString(str)) return false; return true; }
/************************************************************************************ 函数名称: bool CField::SetAsString(CTString Value) 功能说明:虚函數,将m_pValve所指向的数据修改为传入的CString型数据. 详细解释:1.如果子类没有实现,则仅实现错误提示,以示不能转换. 1.如果子类实现,将调用子类的方法. 出入参数: [in]: 无. [out]:无. 返回类型:bool 制作:YTLI 2002/07/15 修改: ************************************************************************************/ bool CField::SetAsString(CTString Value) { if(m_nNextModifyField == -1) return false; else { if(m_pFields->IsConvertToLastVersion(this)) { NewData(); SetAsString(Value);//###_Mod 2002-9-26 zlq CField* pNewField = m_pFields->m_FieldVersion.GetFieldByAbsolutePos(m_nNextModifyField); pNewField ->ConvertToCurField(this); DeleteData(); } } return true; }
void PrefixDataField::Inc() { const TCHAR *chars = GetAllowedCharacters(); if (StringIsEmpty(chars)) return; const TCHAR current = GetAsString()[0]; const TCHAR *p = current != _T('\0') ? _tcschr(chars, current) : nullptr; TCHAR next; if (p == nullptr) next = chars[0]; else next = p[1]; const TCHAR new_value[2] = { next, _T('\0') }; SetAsString(new_value); }
void DataFieldInteger::SetFromCombo(int iDataFieldIndex, TCHAR *sValue) { SetAsString(sValue); }
void DataFieldFloat::SetFromCombo(int iDataFieldIndex, const TCHAR *sValue) { SetAsString(sValue); }
void CSortedPtrArrayElementString::SetAsUnsigned32(DWORD dwValue) { char szBuffer[128]; SetAsString(ultoa(dwValue, szBuffer, 10)); }
void CSortedPtrArrayElementString::SetAsSigned32(long lValue) { char szBuffer[128]; SetAsString(ltoa(lValue, szBuffer, 10)); }
void DataFieldInteger::SetFromCombo(int index, TCHAR *value) { SetAsString(value); }
//将原来版本的字段数据转换到当前字段的数据。 //1。如果本字段空间为空,生成空间 //2。要进行原来字段空值判断! //2。1如果为空则本字段为空 //2。2如果不为空则将原来的数据以原来的数据类型读 出,然后调用本字段的SetAs***设置。 //然后,如果有新的next字段,则调用该字段的ConvertToCurField函数,并且负责释放本空间,并且清0 void CField::ConvertToCurField(CField* pOldField) { /* if(this->GetFieldType() == fString) { ConvertToCurField(pOldField); return ; } */ if(!m_pValue) {//本字段也为中间字段 NewData(); if(pOldField->IsNull()) SetNull(); else { CFieldType ftType = pOldField->GetFieldType(); if( ftType == fBoolean ) SetAsBool( pOldField->GetAsBool()); else if( ftType == fCurrency ) SetAsCurrency( pOldField->GetAsCurrency()); else if( ftType == fDate ) //SetAsBool( pOldField->GetAsDateTime()); SetAsBool( true);//#_修改 2002-12-2 $ 10:01:35 zlq else if( ftType == fDouble ) SetAsDouble( pOldField->GetAsDouble()); else if( ftType == fInt ) SetAsInteger( pOldField->GetAsInteger()); else if( ftType == fString ) SetAsString( pOldField->GetAsString()); //assert(m_nNextModifyField != -1); CField* pNewField = m_pFields->m_FieldVersion.GetFieldByAbsolutePos(m_nNextModifyField); pNewField->ConvertToCurField(this); } DeleteData(); } else //最后一层转换. { if(pOldField->IsNull()) SetNull(); else { if( pOldField->GetFieldType() == fBoolean ) SetAsBool( pOldField->GetAsBool()); else if( pOldField->GetFieldType() == fCurrency ) SetAsCurrency( pOldField->GetAsCurrency()); else if( pOldField->GetFieldType() == fDate ) //SetAsBool( pOldField->GetAsDateTime()); SetAsBool( true); else if( pOldField->GetFieldType() == fDouble ) SetAsDouble( pOldField->GetAsDouble()); else if( pOldField->GetFieldType() == fInt ) SetAsInteger( pOldField->GetAsInteger()); else if( pOldField->GetFieldType() == fString ) SetAsString( pOldField->GetAsString()); //assert(m_nNextModifyField == -1); } } }
int DataFieldFloat::SetFromCombo(int iDataFieldIndex, TCHAR *sValue) { SetAsString(sValue); return 0; }