bool NFCRecord::SetRow(const int nRow, const NFDataList & var) { if (var.GetCount() != GetCols()) { return false; } if (!IsUsed(nRow)) { return false; } for (int i = 0; i < GetCols(); ++i) { if (var.Type(i) != GetColType(i)) { return false; } } for (int i = 0; i < GetCols(); ++i) { NF_SHARE_PTR<NFData>& pVar = mtRecordVec.at(GetPos(nRow, i)); if (nullptr == pVar) { pVar = NF_SHARE_PTR<NFData>(NF_NEW NFData(var.Type(i))); } NFData oldValue = *pVar; pVar->variantData = var.GetStack(i)->variantData; RECORD_EVENT_DATA xEventData; xEventData.nOpType = RECORD_EVENT_DATA::Update; xEventData.nRow = nRow; xEventData.nCol = i; xEventData.strRecordName = mstrRecordName; OnEventHandler(mSelf, xEventData, oldValue, *pVar); } return false; }
int NFCRecord::AddRow(const int nRow, const NFDataList& 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<NFData>& pVar = mtRecordVec.at(GetPos(nFindRow, i)); if (nullptr == pVar) { pVar = NF_SHARE_PTR<NFData>(NF_NEW NFData(var.Type(i))); } pVar->variantData = var.GetStack(i)->variantData; } RECORD_EVENT_DATA xEventData; xEventData.nOpType = bCover? RECORD_EVENT_DATA::Cover : RECORD_EVENT_DATA::Add; xEventData.nRow = nFindRow; xEventData.nCol = 0; xEventData.strRecordName = mstrRecordName; NFData tData; OnEventHandler(mSelf, xEventData, tData, tData); //FIXME:RECORD return nFindRow; }