翻譯|使用教程|編輯:鮑佳佳|2020-07-03 17:43:18.270|閱讀 523 次
概述:本文介紹如何對日歷控件使用自定義數據源。它是基于標準的Visual Basic CalendarSample應用程序中包含的MySQL數據庫提供程序示例進行描述的。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
日歷控件具有對以下數據提供程序的內置支持:內存,XML文件(或二進制文件),數據庫(訪問),MAPI(Outlook)。
但是,許多人已經有自己的數據來源,可以在“日歷”窗口中顯示數據。這可能是不支持Codejock Calendar數據庫模型的舊數據庫,可能是特定的數據庫服務器(Microsoft SQL Server,MySQL,FoxPro等),甚至可能是指定數據對象的自定義內存數組,而該數組已經具有自己的加載/保存代碼。
另一個問題是如何允許多人在不同的工作站上同時處理同一組約會(請注意,使用所描述的解決方案可能只會部分解決此問題)。
第三個問題是當人們擁有大量約定數據并且懷疑所有數據同時保存在內存中時可能會出現問題。
通過實施自定義日歷數據提供程序,可以解決所有這些問題。
簡單的解決方案-自定義加載/保存事件代碼
首先讓我們考慮一個最簡單的情況-您有一個舊數據庫,只想在單個工作站上使用它,并且想用相應的工具欄按鈕打開并保存所有更改(或其他方式,主要思想是數據庫并不總是與日歷上顯示的數據庫同步)。
在這種情況下,正確的解決方案是根本不使用自定義數據提供程序:
您所需要做的就是使用標準的內存數據提供程序,該程序默認情況下是通過Calendar控件創建的。當然,它可以序列化為XML文件,但是如果您不提供文件名,那么Memory DataProvider將會成為您的事件的簡單存儲。您必須用事件填充日歷,然后允許用戶使用它們,并在保存時通過迭代所有日歷事件來更新數據庫中的所有數據。這可能以以下方式顯示:
加載:'加載事件 Sub Populate() objCalendar.DataProvider.RemoveAllEvents '<打開事件記錄集或集合> '<迭代此集合> 對于 objEventsCollection 中的每個 objEvent 設置 objCalendarEvent = objCalendar.DataProvider.CreateEventEx(objEvent.ID) objCalendarEvent.StartTime = .. 。 ... objCalendar.DataProvider.AddEvent objCalendarEvent 下一頁 objCalendar.Populate 結束小組保存:
“迭代事件和保存到數據庫 私人 小組保存() 昏暗 objEvent 作為 CalendarEvent 對于 每個 objEvent 在 objCalendar.DataProvider.GetAllEventsRaw ” <節省事件屬性> “objEvent.Id ‘objEvent.Subject 接著 ’<提交節省> 結束 子復雜的解決方案-定制數據提供者
CalendarControl.SetDataProvider“ Provider =自定義;”當您擁有自己要顯示的數據源(例如DB或內存集合),約定記錄眾多或想要具有多用戶工作環境時,需要自定義數據提供程序。
已經有幾個標準示例可用(用于MS SQL Server和MySQL)。
簡要介紹其工作原理:它要求您在數據源中創建/讀取/更新日歷事件。設置“自定義數據提供程序-日歷”時,您可以發送一些通知,以捕獲和處理數據操作:例如從數據庫讀取事件數據并填充日歷事件對象成員或更新/創建/刪除數據庫記錄。Private Sub Calendar_DoCreateEvent(ByVal pEvent As _ XtremeCalendarControl.CalendarEvent,NewEventID _ As Long,bResult As Boolean) '1)從pEvent獲取屬性'2)準備并執行相應的SQL語句,該語句將'新事件添加到數據庫中'3)如果數據庫有自動遞增的事件ID字段,檢索“它一個新的事件,并分配到NewEventID ” 4)集bResult為true,如果一切操作順利完 結束小組關于遞歸
加載重復模式時,還必須加載和設置與此模式相關的所有日歷事件異常。
正在加載重復發生master事件
當您讀取具有“master”重復狀態的日歷事件對象并將其返回給自定義數據提供程序時,有一個技巧。
日歷事件對象有2個特殊的自定義屬性:“ process_RecurrenceState”和“ process_RecurrencePatternID”。它們用于處理master事件。如果設置了它們,并且RecurrenceState為“ master”,則自定義數據提供程序將觸發DoReadRPattern事件,并將該事件作為Master。并且還將為RetrieveDayEvents方法生成事件。這些屬性是臨時的,它們將被數據提供者刪除。
如果未設置這些屬性–但是自定義數據提供者期望主事件已經完成-調用CreateRecurrence方法并設置重復模式。
當事件和模式分別存儲在不同的表中時,此機制對于DB數據提供程序很有用。
但是,如果事件存儲在某個內存集合或數組中,則不應使用它,因為主事件在內部存儲了重復模式。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@ke049m.cn