這一篇要談的是整個範例專案中 News.aspx 這個網頁檔案,它的主要功能是用來顯示特定日期的新聞,當使者於首頁的「最新消息」區域按一下「more...」連結,會顯示這個網頁的內容,底下列舉這個網頁的配置:
畫面的左邊是一個 Calendar 控制項,右邊是一個GridView 控制項,當使用者按下這個月曆的某個特定日期時,GridView 控制項會顯示指定日期的相關新聞清單。GridView 控制項的下方有一個FormView 控制項,這個控制項為使用者於 GridView 點選某則新聞的時候,顯示此則新聞的詳細內容。
現在,我們要透過進一步的設定,將畫面上的控制項功能串接起來,先切換至後置程式碼,其中定義了一個方法成員ShowData,內容如下:
Private Sub ShowData(ByVal sql As String, _
Optional ByVal pdate As Object = Nothing)
Dim conn As String
Dim sqlString As String
conn = System.Configuration.ConfigurationManager.
ConnectionStrings("ConnectionString").ToString()
sqlString = sql
Dim sqlconn As New SqlConnection(conn)
Dim sqlcmd As New SqlCommand(sqlString, sqlconn)
Dim dReader As SqlDataReader
If Not pdate Is Nothing Then
Dim sqlPara As New SqlParameter()
sqlPara.SqlDbType = Data.SqlDbType.DateTime
sqlPara.ParameterName = "@PDate"
sqlPara.Value = CDate(pdate)
sqlcmd.Parameters.Add(sqlPara)
DateLabel.Text = "新聞日期:" + pdate.ToShortDateString()
Else
DateLabel.Text = "最新消息"
End If
sqlconn.Open()
dReader = sqlcmd.ExecuteReader()
NewsGridView.DataSource = dReader
NewsGridView.DataBind()
sqlconn.Close()
End Sub
這個方法接受兩個參數,第一個參數是用來取得資料的SQL 陳述式sql,另外一個pdate 則是選擇性的日期參數,這個參數表示所要檢視的新聞日期。接下來的程式碼以此sql 為基礎,建立一個SqlCommand 物件,然後依據所傳入的pdate 參數,建立所需的指令參數,最後執行ExecuteReader 方法,取得SQL 陳述式所回傳的資料內容物件dReader,最後這個物件被設定給畫面上的GridView 控制項。現在切換至月曆控制項的SelectionChanged 事件處理程序,內容如下:
Protected Sub NewsCalendar_SelectionChanged(…) Handles _
NewsCalendar.SelectionChanged
Dim sql As String
Dim pdate As Date
pdate = NewsCalendar.SelectedDate
sql = "SELECT * FROM NewsArticle WHERE " & _
"DATEDIFF(DAY,AddedDate, @PDate) = 0 "
ShowData(sql, pdate)
End Sub
這個副程式於使用者按下月曆上的某個日期時被執行,將使用者所點選的日期與SQL 陳述式當作參數傳入,呼叫ShowData,完成資料的顯示。另外,在這個網頁載入的時候,我們必須令其顯示預設的最新6 資料,因此其載入事件處理程序如下:
Protected Sub Page_Load(…) Handles Me.Load
Dim sql As String
sql = "SELECT TOP 6 * FROM NewsArticle ORDER BY AddedDate DESC"
ShowData(sql)
End Sub
其中的SQL 陳述式被當作參數傳入ShowData,於GridView 控制項顯示取得的資料。從上述的說明中,讀者可以看到GridView 的資料來源是經由程式碼的設定所取得,接下來則是特定新聞的細節資料,我們透過FormView 控制項來展示。拖曳SqlDataSource 至網頁上,完成如下頁的設定:
其中的WHERE 條件式, 必須將NewsID 設定為使用者在GridView 控制項上面所選取的新聞資料。最後, 將FormView 的資料來源, 設定為此SqlDataSource 即可。