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