Hello Oleksandr, I can't reproduce it with the Calendar Demo. We use a cutom data provider in our sample. But the problem seems to be on a higher level. Can you give use some information how that can happen?
Here is how we add Events:
//---------------------------------------------------------------------------------------
void CUICJCalendarView::OnRetrieveDayEvents(XTP_NOTIFY_CODE /*Event*/, WPARAM wParam , LPARAM lParam)
//---------------------------------------------------------------------------------------
{
XTP_DATE_VALUE oDate = (XTP_DATE_VALUE) wParam;
CXTPCalendarEventsPtr* pEvents = (CXTPCalendarEventsPtr*) lParam; // [in/out] A pointer to pointer to events array
COleDateTime dtStart = (DATE)oDate;
XTRACE(+1, _T("CUICJCalendarView::OnRetrieveDayEvents( für %s )"), (LPCTSTR) dtStart.Format((UINT)IDS_DATEFMT_DDMMYYYYA));
int nDayCount = GetCalendarCtrl().GetActiveView()->GetViewDayCount();
COleDateTime dtCurrentViewStart = GetCalendarCtrl().GetActiveView()->GetViewDayDate(0);
XTRACE(0, _T(" nDayCount = %d and first date (%s) "), nDayCount, (LPCTSTR) dtCurrentViewStart.Format((UINT)IDS_DATEFMT_DDMMYYYYA));
if(*pEvents == NULL)
{
*pEvents = new CXTPCalendarEvents();
(*pEvents)->InternalAddRef();
}
else
{
(*pEvents)->RemoveAll();
(*pEvents)->InternalAddRef();
ASSERT((*pEvents)->GetCount() == 0);
}
CWaitCursor oWait;
// fill events to my own cache (not the calendar cache)
if(dtStart == dtCurrentViewStart && nDayCount > 1)
AssignEventsToTmpCache(dtCurrentViewStart, nDayCount);
CXTPCalendarEvents* pEventsOfDayFromCache = NULL;
int nDBIDate = CMfxDateTime(dtStart).GetDBIDate();
if(m_oMapTmpEvents.Lookup(nDBIDate, pEventsOfDayFromCache))
{
XTRACE(0, _T("OnRetrieveDayEvents Count = %d"), pEventsOfDayFromCache->GetCount());
// get value from my cache
(*pEvents)->Append(pEventsOfDayFromCache);
(*pEvents)->CloneEvents();
XTRACE(0, _T("OnRetrieveDayEvents Count = %d"), (*pEvents)->GetCount());
}
else
{
// get the events by query
AssignEvents((*pEvents), dtStart);
}
(*pEvents)->InternalRelease();
XTRACE(-1, _T("<<CUICJCalendarView::OnRetrieveDayEvents"));
}
//---------------------------------------------------------------------------------------
BOOL CUICJCalendarView::AssignEvents(CXTPCalendarEvents* pEvents, const COleDateTime dtDate)
//---------------------------------------------------------------------------------------
{
XTRACE(+1, _T("CUICJCalendarView::AssignEvents(...,%s)"), (LPCTSTR) CMfxDateTime(dtDate).Format((UINT)IDS_DATEFMT_DDMMYYYYA));
ASSERT(pEvents);
ASSERT(m_poBLTMManager && m_pUITMFrame);
ASSERT(m_poBLTMManager->GetOptions());
long nDBIDate = CMfxDateTime(dtDate).GetDBIDate();
int nCount = 1;
CBLTMAppointData oDlgData;
XTRACE(0, _T("CUICJCalendarView::AssignEvents Series -------"));
for(int i = 0; i < nCount; ++i)
{
XTRACE(0, _T("GetDateEntryCount = %d"), m_pUITMFrame->GetDateEntryCount(nDBIDate + i));
for(POSITION Pos = m_pUITMFrame->GetFirstDatePosition(nDBIDate + i)
; Pos != NULL; )
{
if(m_pUITMFrame->GetNextDate(Pos, nDBIDate + i, oDlgData, CBLTMManager::TM_DATADETAIL_RECPAT | CBLTMManager::TM_DATADETAIL_ATTENDEES))
{
CXTPCalendarEvent* ptrEvent = new CXTPCalendarEvent(GetCalendarCtrl().GetDataProvider());
AssignEvent(ptrEvent, oDlgData, dtDate);
pEvents->Add(ptrEvent);
ptrEvent->InternalRelease();
}
}
}
XTRACE(0, _T("CUICJCalendarView::AssignEvents single day appontments -------"));
// Single Day Appointments
CXDAVariantList oLstID;
CDADateTime oFromSpan(UIMfx2DADateTime(CMfxDateTime(nDBIDate, 0)));
CDADateTime oToSpan(UIMfx2DADateTime(CMfxDateTime((long)(nDBIDate+nCount-1), (long)MAX_TM_MINUTES)));
if(m_poBLTMManager->GetListSingleDayAppointments(oLstID, oFromSpan, oToSpan))
{
for(CXDAVariantList::const_iterator iterApp = oLstID.begin()
; iterApp != oLstID.end()
; ++iterApp)
{
CBLTMAppointData oTmpData;
if(m_poBLTMManager->ReadAppointment(*iterApp, oTmpData, CBLTMManager::TM_DATADETAIL_RECPAT | CBLTMManager::TM_DATADETAIL_ATTENDEES))
{
CXTPCalendarEvent* ptrEvent = new CXTPCalendarEvent(GetCalendarCtrl().GetDataProvider());
AssignEvent(ptrEvent, oTmpData, dtDate);
pEvents->Add(ptrEvent);
ptrEvent->InternalRelease();
}
}
}
XTRACE(0, _T("CUICJCalendarView::AssignEvents Count = %d"), pEvents->GetCount());
XTRACE(-1, _T("<<CUICJCalendarView::AssignEvents"));
return TRUE;
}
Thank you!
|