大家應該比較熟悉outlook裡的排程,點進去就是一個日曆版面,選擇某日即可添加當天的排程,還有偶爾玩下開心網的兄弟們應該也知道有個議程組件,其實和outlook有點兄弟關係,只不過比outlook做的要漂亮些:) 從VS03到VS08裡,ASP.NET一直帶有個Calendar日曆控制項,我不知道曆經三代歲月滄桑的交替,這個控制項發生了多少變化,不是很清楚,因為從來就沒在項目中用過,最近的一個項目倒是提到了這方面的需求,要求使用者登入點“會議議程”能顯示當前月的日期和相應具體日期有哪些事情等...... ,首先看下面個圖,然後依此慢慢詳述:
這個是運行系統的原圖,下面具體說明下用ASP.NET的日曆控制項來重新完成這一功能,完整的demo在文章最後有連結地址供下載。
Calendar控制項有一個DayRender事件,即是在呈現日時激發,我們的處理常式代碼必須寫在這個事件下才行,只有這樣才能保證在呈現某個日時從資料庫載入相應的排程來重繪當前日曆控制項日的日。
首先定義兩個一維數組(當然也可以定義一個二維數組),一個記錄當前月中的日,一個幾個當前月中的日對應的會議標題,如
int[] intArray = new int[999];
title = new string[999];
假設選中的是12月份,從資料庫取出的資料可能是這樣的intArray [0] = 2,intArray [1] = 2,intArray [3] = 5等 對應的標題數組就是這樣的
title[0] = "上午10點開會" title [1] = "下午XX需求討論" title [2] = "客戶系統示範"(沒有排程的日,那麼intArray [i] = 0,後面程式跳出迴圈的依據正式根據該項的值是否為0來判斷的) 這個表示12月2日有兩項會議排程,12月5日有一項排程,這裡我定義的數組長度為999相當於每月平均每天30多次會議,一般也不會到這個數了呵呵,如果從資料庫讀出的當月會議項次超出999次當然會報異常,這裡當然也是可以從資料庫動態讀,實際的必要性也不是很大吧。