void CMedic::RefreshReport( CMedicSet *pMedicSet ) { CMainFrame *p = (CMainFrame *)AfxGetMainWnd(); CXTPReportControl *pReport = p->m_wndReportCtrl; CXTPReportRecords *pRecords = pReport->GetRecords(); pRecords->RemoveAll(); CXTPReportRecord *pRecord; CXTPReportRecordItem *pItem; CString strPrice; while(!pMedicSet->IsEOF()) { pRecord = new CXTPReportRecord(); pRecord->AddItem(new CXTPReportRecordItemText(pMedicSet->m_MedicID)); pRecord->AddItem(new CXTPReportRecordItemText(pMedicSet->m_MedicName)); pRecord->AddItem(new CXTPReportRecordItemText(pMedicSet->m_MedicType)); CTime ProduceData = pMedicSet->m_ProduceDate; pRecord->AddItem(new CXTPReportRecordItemText(ProduceData.Format(_T("%Y-%m-%d")))); if (0 == pMedicSet->m_MedicNumber) { pItem = pRecord->AddItem(new CXTPReportRecordItemNumber(pMedicSet->m_MedicNumber)); pItem->SetBackgroundColor(RGB(255,0,0)); } else pRecord->AddItem(new CXTPReportRecordItemNumber(pMedicSet->m_MedicNumber)); strPrice.Format("%.2f",pMedicSet->m_MedicPrice); pRecord->AddItem(new CXTPReportRecordItemText(strPrice)); pRecord->AddItem(new CXTPReportRecordItemNumber(pMedicSet->m_GuarantPeriod)); pRecord->AddItem(new CXTPReportRecordItemText(pMedicSet->m_ProduceCompany)); pReport->AddRecord(pRecord); pMedicSet->MoveNext(); } pReport->Populate(); }
HRESULT CXTPReportDataManager::PrepareDeleteReportRecords(XTPREPORTADODB::_RecordsetPtr pRecordset) { HRESULT hr = E_FAIL; try { if (m_pDeleteRecords) m_pDeleteRecords->RemoveAll(); else m_pDeleteRecords = new CXTPReportRecords(TRUE); if (!m_pDeleteRecords) return E_FAIL; CXTPReportRecords* pRecords = m_pReportControl->GetRecords(); if (!(pRecordset != NULL && pRecords)) return E_FAIL; long lRecords; if (FAILED(hr = pRecordset->get_RecordCount(&lRecords))) return hr; if (lRecords <= 0) return E_FAIL; pRecordset->MoveFirst(); VARIANT_BOOL vtRecordsEof; pRecordset->get_bEOF(&vtRecordsEof); while (!vtRecordsEof) { // get record bookmark VARIANT vtBookmark; if (FAILED(hr = pRecordset->get_Bookmark(&vtBookmark))) break; CXTPReportRecord* pRecord = pRecords->FindRecordByBookmark(vtBookmark, TRUE); if (pRecord) m_pDeleteRecords->Add(pRecord); pRecordset->MoveNext(); pRecordset->get_bEOF(&vtRecordsEof); } } catch(_com_error &e) { TRACE_ProviderError(m_pConnection); TRACE_ComError(e); hr = FAILED(hr) ? hr : E_FAIL; } catch(...) { TRACE(_T("Unknown error in PrepareDeleteReportRecords()\n")); hr = FAILED(hr) ? hr : E_FAIL; } return FAILED(hr) ? hr : S_OK; }
CXTPMarkupContext* CXTPReportRecord::GetMarkupContext() const { CXTPReportRecords* pRecords = m_pRecords; while (pRecords != NULL) { CXTPMarkupContext* pMarkupContext = pRecords->GetMarkupContext(); if (pMarkupContext) return pMarkupContext; if (pRecords->m_pOwnerRecord) pRecords = pRecords->m_pOwnerRecord->GetRecords(); else return NULL; } return NULL; }
void CSimpleReport::RowDown( bool (*copyFunc)(CSimpleReport*, CXTPReportRecord*, CXTPReportRecord*) ) { int rowidx = GetFocusedRow()->GetIndex(); int recidx = GetFocusedRow()->GetRecord()->GetIndex(); CXTPReportRecords* pRecs = GetRecords(); if (!pRecs || recidx >= pRecs->GetCount() - 1) return; CXTPReportRecord* pRec = newRec(); CXTPReportRecord* src = pRecs->GetAt(recidx); if (!pRec || !src) return; copyFunc(this, src, pRec); pRecs->RemoveAt(recidx); pRecs->InsertAt(recidx+1, pRec); Populate(); SetFocusedRow(GetRows()->GetAt(rowidx+1)); SetFocus(); }
HRESULT CXTPReportDataManager::UpdateReportRecords(XTPREPORTADODB::_RecordsetPtr pRecordset) { HRESULT hr = E_FAIL; try { CXTPReportRecords* pRecords = m_pReportControl->GetRecords(); if (!(pRecordset != NULL && pRecords)) return E_FAIL; XTPREPORTADODB::FieldsPtr pFields; if (FAILED(hr = pRecordset->get_Fields(&pFields)) || pFields == NULL) return hr; long lFields; if (FAILED(hr = pFields->get_Count(&lFields)) || lFields == 0) return hr; long lRecords; if (FAILED(hr = pRecordset->get_RecordCount(&lRecords))) return hr; if (lRecords <= 0) return E_FAIL; pRecordset->MoveFirst(); VARIANT_BOOL vtRecordsEof; pRecordset->get_bEOF(&vtRecordsEof); while (!vtRecordsEof) { // get record bookmark VARIANT vtBookmark; if (FAILED(hr = pRecordset->get_Bookmark(&vtBookmark))) break; CXTPReportRecord* pRecord = pRecords->FindRecordByBookmark(vtBookmark, TRUE); if (pRecord) { // get field values VARIANT vtIdx; vtIdx.vt = VT_I4; for (int i = 0; i < lFields; i++) { vtIdx.lVal = i; XTPREPORTADODB::FieldPtr pField; if (FAILED(hr = pFields->get_Item(vtIdx, &pField)) || pField == NULL) break; VARIANT vtValue; if (FAILED(hr = pField->get_Value(&vtValue))) break; CXTPReportRecordItemVariant* pItem = (CXTPReportRecordItemVariant*)pRecord->GetItem(i); if (!pItem) break; pItem->SetValue(COleVariant(vtValue)); } m_pReportControl->UpdateRecord(pRecord, TRUE); } pRecordset->MoveNext(); pRecordset->get_bEOF(&vtRecordsEof); } } catch(_com_error &e) { TRACE_ProviderError(m_pConnection); TRACE_ComError(e); hr = FAILED(hr) ? hr : E_FAIL; } catch(...) { TRACE(_T("Unknown error in UpdateReportRecords()\n")); hr = FAILED(hr) ? hr : E_FAIL; } return FAILED(hr) ? hr : S_OK; }
void CSimpleReport::Paste() { if (IsVirtualMode()) return; CWaitCursor _WC; CLIPFORMAT uCF_Records = (CLIPFORMAT)::RegisterClipboardFormat(XTPREPORTCTRL_CF_RECORDS); CXTPReportRecords arRecords; BOOL bTryPasteFromText = TRUE; // Retrieve text from the clipboard if (!OpenClipboard()) return; if (::IsClipboardFormatAvailable(uCF_Records)) { HGLOBAL hPasteData = ::GetClipboardData(uCF_Records); if (hPasteData) { bTryPasteFromText = FALSE; const int cErrTextSize = 1024; TCHAR szErrText[cErrTextSize + 1]; CSharedFile fileSahred; fileSahred.SetHandle(hPasteData, FALSE); CArchive ar(&fileSahred, CArchive::load); try { CXTPPropExchangeArchive px(ar); BOOL bread = FALSE; #if _XTPLIB_VERSION_PREFIX == 1502 bread = _ReadRecordsFromData(&px, arRecords); #else bread = _ReadRecodsFromData(&px, arRecords); #endif if (!bread) { arRecords.RemoveAll(); } } catch(CArchiveException* pE) { if (pE->GetErrorMessage(szErrText, cErrTextSize)) { TRACE(_T("EXCEPTION: CXTPReportControl::Paste() - %s\n"), szErrText); } pE->Delete(); } catch(CFileException* pE) { if (pE->GetErrorMessage(szErrText, cErrTextSize)) { TRACE(_T("EXCEPTION: CXTPReportControl::Paste() - %s\n"), szErrText); } pE->Delete(); } catch(...) { TRACE(_T("EXCEPTION: CXTPReportControl::Paste() - Unhandled Exception!\n")); } //********* ar.Close(); // detach from file fileSahred.Detach(); //detach from data ::GlobalUnlock(hPasteData); // unlock data } } UINT uCF_TText = sizeof(TCHAR) == 2 ? CF_UNICODETEXT : CF_TEXT; if (bTryPasteFromText && ::IsClipboardFormatAvailable(uCF_TText)) { // Try to get text data from the clipboard HGLOBAL hglbPaste = ::GetClipboardData(uCF_TText); // Import Text data into the control if (hglbPaste != NULL) { TCHAR* lpszClipboard = (TCHAR*)GlobalLock(hglbPaste); BOOL bRead = FALSE; #if _XTPLIB_VERSION_PREFIX == 1502 bRead = _ReadRecordsFromText(lpszClipboard, arRecords); #else bRead = _ReadRecodsFromText(lpszClipboard, arRecords); #endif if (!bRead) { arRecords.RemoveAll(); } ::GlobalUnlock(hglbPaste); } } ::CloseClipboard(); ////////////////////////////////////////////////////////////////////////// CUpdateContext updateContext(this); // Add and Populate records CXTPReportRow* pRow = GetFocusedRow(); if (pRow == NULL) return; int n = pRow->GetRecord()->GetIndex(); int nRecordsCount = arRecords.GetCount(); if (nRecordsCount > 0) { for (int i = nRecordsCount - 1; i >= 0; i--) { CXTPReportRecord* pRecord = arRecords.GetAt(i); if (pRecord) { CMDTARGET_ADDREF(pRecord); if (m_bAdd) GetRecords()->Add(arRecords.GetAt(i)); else GetRecords()->InsertAt(n, arRecords.GetAt(i)); } } Populate(); _SelectRows(&arRecords); } m_bAdd = false; }
void CMedic::MedicSearchOutDate() { CMainFrame *p = (CMainFrame *)AfxGetMainWnd(); CXTPReportControl *pReport = p->m_wndReportCtrl; CXTPReportRecords *pRecords = pReport->GetRecords(); pRecords->RemoveAll(); CXTPReportRecord *pRecord; CMedicSet *pMedicSet = &p->medicSet; pMedicSet->m_strFilter = ""; pMedicSet->Requery(); CMedicManage ManMedic; CTime CurDate = CTime::GetCurrentTime(); CString strPrice; while(!pMedicSet->IsEOF()) { ManMedic.SetMedicSet(pMedicSet); CTime OutDate = ManMedic.GetOutDateTime(); /*CString k = OutDate.Format(_T("%Y-%m-%d"));*/ if (OutDate < CurDate) { pRecord = new CXTPReportRecord(); pRecord->AddItem(new CXTPReportRecordItemText(pMedicSet->m_MedicID)); pRecord->AddItem(new CXTPReportRecordItemText(pMedicSet->m_MedicName)); pRecord->AddItem(new CXTPReportRecordItemText(pMedicSet->m_MedicType)); CTime ProduceData = pMedicSet->m_ProduceDate; pRecord->AddItem(new CXTPReportRecordItemText(ProduceData.Format(_T("%Y-%m-%d")))); pRecord->AddItem(new CXTPReportRecordItemNumber(pMedicSet->m_MedicNumber)); strPrice.Format("%.2f",pMedicSet->m_MedicPrice); pRecord->AddItem(new CXTPReportRecordItemText(strPrice)); pRecord->AddItem(new CXTPReportRecordItemNumber(pMedicSet->m_GuarantPeriod)); pRecord->AddItem(new CXTPReportRecordItemText(pMedicSet->m_ProduceCompany)); pReport->AddRecord(pRecord); } pMedicSet->MoveNext(); } pReport->Populate(); }