close

上一篇文章:FileUpload + FormView(或DetailsView)看似簡單,但不好做 #1--初學者的盲點

http://mis2000lab.pixnet.net/blog/post/34543529

 

程式的執行成果:

      把 FormView的新增樣版(InsertItemTemplate),裡面加上 FileUpload控制項

      希望「新增」一筆記錄的同時,也能順便「上傳」檔案

這個範例真的不難,

簡單的說,看過「上集」第十章,學會 .FindControl()方法即可

 

 

 

加上對於 FormView(DetailsView) + SqlDataSource夠熟練

願意「動手寫」一點程式

 

真的很快就搞定了。

 

 

 

 

    Protected Sub FormView1_ItemInserting(sender As Object, e As FormViewInsertEventArgs) Handles FormView1.ItemInserting
        '== 自己寫程式了,所以 .aspx檔(畫面)裡面的 SqlDataSource,請把 InsertCommand刪除。
        SqlDataSource1.InsertCommand = "INSERT INTO [FileUpload_DB] ([FileUpload_time], [test_id], [FileUpload_FileName], [FileUpload_Memo], [FileUpload_User]) VALUES (@FileUpload_time, @test_id, @FileUpload_FileName, @FileUpload_Memo, @FileUpload_User)"

        '== 參數的寫法,可以參考「搜尋引擎」那一章,範例 Search_Engine_4_SqlDataSource_Manual.aspx。
        '== 這裡寫的比較簡單,但實務上,要小心資料隱碼攻擊(SQL Injection)。

        Dim ca As Calendar = FormView1.FindControl("Calendar1")
        SqlDataSource1.InsertParameters.Add("FileUpload_time", ca.SelectedDate)

        Dim tb1 As TextBox = FormView1.FindControl("test_idTextBox")
        SqlDataSource1.InsertParameters.Add("test_id", tb1.Text)

        '==== 檔案上傳的程式,寫在這裡 ======================(start)==
        Dim FL As FileUpload = FormView1.FindControl("FileUpload1")

        '-- 註解:請看上集,第十八章,FileUpload 有完整範例
        ......抱歉!省略.........


        SqlDataSource1.InsertParameters.Add("FileUpload_FileName", fileName)  '== SqlDataSource的參數
        '==== 檔案上傳的程式,寫在這裡 =======================(end)==

        Dim tb2 As TextBox = FormView1.FindControl("FileUpload_MemoTextBox")
        SqlDataSource1.InsertParameters.Add("FileUpload_Memo", tb2.Text)

        Dim tb3 As TextBox = FormView1.FindControl("FileUpload_UserTextBox")
        SqlDataSource1.InsertParameters.Add("FileUpload_User", tb3.Text)

    End Sub


    Protected Sub SqlDataSource1_Inserted(sender As Object, e As SqlDataSourceStatusEventArgs) Handles SqlDataSource1.Inserted
        '== 資料新增成功以後 ....
        If FormView1.CurrentMode = FormViewMode.Insert Then
            FormView1.DefaultMode = FormViewMode.ReadOnly
        End If
        '== Select指令被我改過,請到 .aspx畫面去看一下。我做了反排序,讓剛剛新增的那一筆,秀到畫面上(給你確定:新增成功!)

        Label1.Text &= "<h2>檔案上傳、新增一筆記錄,成功!!</h2>"
    End Sub

 

其他的解法,任選其一來作:

(1).  保留HTML畫面中的 SqlDataSource與相關的新增指令(InsertCommand)

        後置程式碼裡面, FormView1_ItemInserting事件

        用 e.Values("欄位名稱") = 您剛剛上傳的檔名。

        C# -- e.Values["欄位名稱"] = 您剛剛上傳的檔名;

 

(2). FileUpload,檔案上傳事先做好。

      上傳成功以後,把上傳的「檔名」,傳入 FormView「新增樣版」裡面的 TextBox(設成唯讀,ReadOnly)

 

(3). 我另外做了一個 ADO.NET (DataReader)的寫法,不用 SqlDataSource

 

以上任選其一來完成

懂得越多、基礎越穩,解法就會源源不絕..........

arrow
arrow
    創作者介紹
    創作者 MIS2000 Lab 的頭像
    MIS2000 Lab

    MIS2000 Lab -- ASP.NET專題實務 / WebForm + MVC線上教學影片

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