int NFCRecord::FindRowByColValue(const int nCol, const NFIDataList& var, NFIDataList& varResult) { if (!ValidCol(nCol)) { return -1; } TDATA_TYPE eType = var.Type(0); if (eType != mVarRecordType->Type(nCol)) { return -1; } switch (eType) { case TDATA_INT: return FindInt(nCol, var.Int(nCol), varResult); break; case TDATA_FLOAT: return FindFloat(nCol, var.Float(nCol), varResult); break; case TDATA_STRING: return FindString(nCol, var.String(nCol).c_str(), varResult); break; case TDATA_OBJECT: return FindObject(nCol, var.Object(nCol), varResult); break; default: break; } return -1; }
int NFCRecord::AddRow(const int nRow, const NFIDataList& var) { bool bCover = false; int nFindRow = nRow; if (nFindRow >= mnMaxRow) { return -1; } if (var.GetCount() != GetCols()) { return -1; } if (nFindRow < 0) { for (int i = 0; i < mnMaxRow; i++) { if (!IsUsed(i)) { nFindRow = i; break; } } } else { if (IsUsed(nFindRow)) { bCover = true; } } if (nFindRow < 0) { return -1; } for (int i = 0; i < GetCols(); ++i) { if (var.Type(i) != GetColType(i)) { return -1; } } SetUsed(nFindRow, 1); for (int i = 0; i < GetCols(); ++i) { NF_SHARE_PTR<NFIDataList::TData> pVar = mtRecordVec.at(GetPos(nFindRow, i)); if (nullptr == pVar) { pVar = NF_SHARE_PTR<NFIDataList::TData>(NF_NEW NFIDataList::TData(var.Type(i))); } pVar->variantData = var.GetStack(i)->variantData; } RECORD_EVENT_DATA xEventData; xEventData.nOpType = bCover? Cover : Add; xEventData.nRow = nFindRow; xEventData.nCol = 0; xEventData.strRecordName = mstrRecordName; NFIDataList::TData tData; OnEventHandler(mSelf, xEventData, tData, tData); //FIXME:RECORD return nFindRow; }