這是我的文章備份,原文請看:

http://www.dotblogs.com.tw/mis2000lab/archive/2011/05/30/calendar_dayrender_personal_schedule_2011.aspx

 

 

 

這個範例,請您務必先完成另一個基礎,才能進行下去。

      使用上一個範例的技巧

      ([習題]Calendar日曆控制項的.OnDayRender()方法與 DayRender事件),作法其實很雷同。

 

 

補充 ASP.NET 4.0 專題實務 / 松崗出版

「上集」第三章 的 日曆控制項範例

 

 

 

自己設計一個簡單的 Table,請參閱書本    ASP.NET 4.0 專題實務 / 松崗出版

      「上集」第三章,   Ch. 3-11-6

 

 

 

1.  除了上述的範例(日曆控制項的 DayRender事件),您要先學會之外,

2.  另外要寫一些 ADO.NET程式(在此使用 DataReader來作)

 

程式執行結果:

     

 

 

01 '----自己(宣告)寫的----
02 Imports System
03 Imports System.Web.Configuration
04 Imports System.Data
05 Imports System.Data.SqlClient
06 '----自己(宣告)寫的----
07  
08  
09  
10     Protected Sub calendar1_DayRender(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DayRenderEventArgs) Handles Calendar1.DayRender
11  
12         '=======微軟SDK文件的範本=======
13         '----(連結資料庫)----
14         Dim Conn As New SqlConnection(WebConfigurationManager.ConnectionStrings("事先寫在Web.Config檔裡面的連結字串").ConnectionString)
15         Dim dr As SqlDataReader = Nothing
16         Dim cmd As SqlCommand = New SqlCommand("select * from Calendar_Schedule", Conn)
17  
18         Try     '==== 以下程式,只放「執行期間」的指令!=====================
19             Conn.Open()   '---- 這時候才連結DB
20  
21             dr = cmd.ExecuteReader()   '---- 這時候執行SQL指令,取出資料
22  
23             While dr.Read()
24                 Dim csTime As Date = FormatDateTime(dr("cs_time"), DateFormat.ShortDate)
25                 '*******************************************************(start)
26                 '-- Cell 屬性表示正在呈現的儲存格,
27                 '-- Day 屬性則表示要呈現在儲存格中的日期。
28  
29                 '--新增一個 Label控制項到日曆裡面的 cell。
30                 If e.Day.Date = csTime Then
31  
32                     '-- 出現一個 Label控制項。
33                     Dim LB As New Label
34                     LB.Text = dr("cs_title")
35  
36                     e.Cell.Controls.Add(LB)
37                 End If
38                 '*******************************************************(end)
39             End While
40  
41         Catch ex As Exception   '---- 如果程式有錯誤或是例外狀況,將執行這一段
42             Response.Write("<b>Error Message----  </b>" + ex.ToString())
43  
44         Finally
45             If Not (dr Is Nothing) Then
46                 cmd.Cancel()
47                 '----關閉DataReader之前,一定要先「取消」SqlCommand
48                 '參考資料: http://blog.darkthread.net/blogs/darkthreadtw/archive/2007/04/23/737.aspx
49                 dr.Close()
50             End If
51             If (Conn.State = ConnectionState.Open) Then
52                 Conn.Close()
53                 Conn.Dispose() '---- 一開始宣告有用到 New的,最後必須以 .Dispose()結束
54             End If
55         End Try
56  
57     End Sub

 

上面程式的缺點:

補充(一)......................................................................................................................................

缺點一:Calendar的 DayRender事件,是日曆上的「每一天」都會執行一次。

           一個月有30天,就會重複執行 30次。 如此一來,就會重複開關資料庫 30之多。

           如果您的DB裡面有 30筆記錄,上面的程式就會跑900次迴圈,很沒效率!

缺點二:SQL指令應該只抓取"當天"、或是"當月份"的資料即可。要用 Select * from 資料表的寫法。

................................................................................................................................................................

 

這篇文章真難得,一天改了三次。

補充(二)

我們作業流程作了改變,(1). 程式碼就大幅減少了,而且(2). 程式執行的迴圈次數也大幅縮短

簡單地說,未來改進的特點如下:

  • 月曆控制項的 DayRender事件,在月曆控制項上面的當月份,「每一天」都會執行一次。如果一個月有 30天,本範例頂多只執行 30次而已。
  • 每次 DayRender事件產生時,就拿即時產生的「那一天(也就是程式碼e.Day.Date去比對資料庫。那一天有行程,才在畫面上呈現出來。

................................................................................................................................................................

 

 

ADO.NET的程式是書本裡面, Ch. 14的 DataReader範本,也提供了C# 版本,您可以在書上找到。

唯一小小修正的部分,只有在 While 迴圈

書裡的光碟,VB、C#都提供給您了,一魚兩吃!

 

==== 廣 告 ====================================================

很多人、很多書商,輕視這些基礎的、入門的 Web控制項,

但是我們真正寫程式,用最多的就是這些基礎控制項。

 

您對他越熟悉,基本功夫就會越穩固。

 

ASP.NET 4.0 專題實務 / 松崗出版
「上集」第三章

我就搜錄各種最常用的範例、程式碼,將近一百頁!

      比較一下你手邊的書本,看看他提供什麼範例給你,

      您就知道他是要教會你?還是隨便帶過去、混過去?

 

說不定,您手邊的入門書,連自己動手寫程式連結資料庫都  "沒有"  呢.....

這就是 ADO.NET程式...........

 



網頁上的補充範例(後續服務),不一定能立即提供 VB / C#語法(看我時間夠不夠寫,請不要跟我要)
書本上面的範例,一定有 VB / C#雙語法給您學習。

............................. 寫信給我,mis2000lab (at) yahoo.com.台灣......

    ASP.NET 4.0 專題實務(松崗出版)

上 / 下兩集合購。優惠價1,180元(免郵資)

上集全新改寫。範例增加66%,內容增加35%。銷售半年,高達三刷

下集(第二版,黑皮書)上市一個月熱銷再刷。2010一年內熱銷四刷! 下集內容增加66%。

上下兩集將近2,000頁,堪稱國內 [最詳盡]的ASP.NET範例教學。

............................. 寫信給我,mis2000lab (at) yahoo.com.台灣......

 

 

文章標籤
創作者介紹

MIS2000 Lab -- ASP.NET專題實務 / 線上教學文件

MIS2000 Lab 發表在 痞客邦 PIXNET 留言(0) 人氣()