一個入門者學習用的小小小小網站範例(11)- 新聞消息瀏覽功能設計





這一篇要談的是整個範例專案中 News.aspx 這個網頁檔案,它的主要功能是用來顯示特定日期的新聞。

這一篇要談的是整個範例專案中 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 即可。