簡介:
         很多地方都有排值班人員的需要,基本上就是以一張員工表為基礎,選定日期與可以複選的人員之後將值班的人員名單加入值班表,值班表會有日期與所有當天或當時值班的人員名冊。當然這張值班表也需要可以更改,所以這個範例會用到新增以及修改的SQL功能。

建立資料庫
首先建立一張『員工表』欄位定義與資料設定如下:


接著建立『值班表』欄位定義如下:


網頁設計
開啟一個ASPX網頁,設計如下物件:

包括一個Calendar,一個CheckboxList將物件連到資料庫的員工表,一個Button,一個TextBox用來顯示當天的值班人員。
請注意CheckoxList不要開啟AutoPostBack功能!因為選人之後要等按下確定排入鍵才開始資料處理的動作。此時執行程式應該可以看到員工名單,為了美觀請設定CheckboxList的RepeatColumns屬性為5(欄),畫面如下:

匯入命名空間
需要用到ADO.NET請在程式碼頁面匯入:
Imports System.Data.SqlClient
Imports System.Data

日期與讀取班表的程式設計
首先是搞定日期,剛進入網頁時必須設為今天,程式寫在Page_Load,改日期程式寫在Calendar1_SelectionChanged,
兩兩個時機都需要去看資料庫當天有無排值班人員,這個動作寫在獨立副程式Change:
(註:Now.ToShortDateString的格式是:2012/12/22)

請注意!資料庫連結物件的連結字串仍然來自web.config檔案,而且上述畫面因版面寬度有限是被截斷不完整的
此外,上面的Page_Load與Calendar1_SelectedChanged事件的內容程式碼其實是一樣的,你也可以讓它們成為共用事件副程式,只要加個Me.Load就可以少寫一個事件了:

這時候因為還沒有資料,選日期時還看不到效果。

確定班表的程式設計

確定班表前應該選擇幾個當天應該值班的員工,本程式會一一檢查勾選狀態,匯集值班人名單到TextBox,每個人員名稱用一個空白字元區隔,再使用ADO.NET語法寫入資料庫。先嘗試用Insert指令新增資料,如果失敗表示裡面已經有舊資料,就改用Update指令。執行畫面如下:

資料庫內值班表的內容大致如下:


顯示值班人員於CheckBoxList
回顧Change副程式可以將當日所有值班人名單顯示於TextBox,但是不會自動顯示於CheckBoxList,要讓資料同時顯示於CheckBoxList程式應該修改如下,就是加入紅框線內的程式碼:

程式就是將資料庫的值班名單字串以空白字元切開為字串陣列C,再逐一檢查C的各個成員與CheckBoxList1成員的名稱,相同者設定為:Selected=True。
此時再選日期時CheckBoxList與TextBox的資料就會同步了! 像這樣: