書籍以及新聞資料的編輯功能,這些功能必須完成登入驗證之後才能使用,因此將這些功能網頁配置於Admin 資料夾,接下來幾篇看看這些網頁的實作,這一篇是關於書籍資料的新增作業。
書籍資料的編輯,是針對「Books」資料表裡面的資料進行新增、刪除或是修改等操作,網頁「BookAdd.aspx」提供新增的功能,它的內容非常單純,就如同上述的意見回函,配置一個FormView 控制項並且以SqlDataSource 控制項作為其資料來源,網頁配置如下:
由於這個網頁只是提供新增書籍資料的功能,因此將其DefaultMode 屬性設定為Insert,令其以InsertItemTemplate 樣板顯示,並且於ModeChanging 事件處理程序中,強制轉換成為Insert 模式,由於我們已經有了這一部份功能的設定經驗,因此這裡就不再說明。這個網頁有兩個相當重要的地方必須說明,切換至後置程式碼,畫面上的「上傳」按鈕其Click 事件處理程序,列舉如下:
Protected Sub UploadButton_Click(…)
Dim fu As FileUpload
Dim pathLabel As Label
fu = CType(BookFormView.FindControl("BookCoverFileUpload"), _FileUpload)
pathLabel = CType(BookFormView.FindControl("ImageUrlLabel"), _Label)
If fu.HasFile = True Then
Dim dirPath As String
dirPath = Server.MapPath("~/Images/") + fu.FileName
fu.SaveAs(dirPath)
pathLabel.Text = "~/Images/" + fu.FileName
End If
End Sub
其中透過FindControl 方法,取得位於FormView 控制項InsertItemTemplate內部的FileUpload 控制項,引用其HasFile 屬性,如果是True 則執行SaveAs 方法將檔案上傳。最後將上傳後的檔案路徑,顯示在畫面上。當使用者完成輸入動作,接下來必須將資料新增至資料庫,但是在此之前,我們必須確認書籍的編號沒有重複,因此必須在FormView 控制項的ItemInserting 事件處理程序裡面,輸入底下的程式碼:
Protected Sub BookFormView_ItemInserting(…) Handles _
BookFormView.ItemInserting
Dim conn As String
Dim bookID As String = ""
Dim sqlString As String
Dim tb As TextBox
tb = CType(BookFormView.FindControl("BookIDTextBox"), TextBox)
conn = System.Configuration.ConfigurationManager._
ConnectionStrings("ConnectionString").ToString()
bookID = tb.Text
sqlString = "SELECT BookID FROM Books WHERE BookID = @BookID"
Dim sqlconn As New SqlConnection(conn)
Dim sqlcmd As New SqlCommand(sqlString, sqlconn)
Dim sqlPara As New SqlParameter()
Dim returnObject As Object
sqlPara.SqlDbType = Data.SqlDbType.NVarChar
sqlPara.ParameterName = "@BookID"
sqlPara.Value = bookID
sqlcmd.Parameters.Add(sqlPara)
sqlconn.Open()
returnObject = sqlcmd.ExecuteScalar()
If returnObject Is Nothing Then
e.Cancel = False
Else
e.Cancel = True
Dim mlb As Label
mlb = CType(BookFormView.FindControl("MessageLabel"), Label)
mlb.Text = "書籍編號重複"
End If
sqlconn.Close()
End Sub
這段程式碼取得使用者輸入網頁中所要新增的書籍編號,然後建立所需的SQL 陳述式, 用來檢視資料庫中, 是否有此筆書籍資料, 最後引用ExecuteScalar 方法,此方法回傳所取得的第一筆資料的第一個欄位的內容資料,如果回傳的資料是空值,表示沒有任何符合的資料,「e.Cancel」設定為False 會完成資料新增動作,否則的話,「e.Cancel」被設定為True,表示取消新增的行為。