FileUpload + FormView(或DetailsView)看似簡單,但不好做 #2--簡單的範例(.FindControl()方法、SqlDataSource參數)

摘要:FileUpload + FormView(或DetailsView)看似簡單,但不好做 #2--簡單的範例(.FindControl()方法、SqlDataSource參數)





 

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

程式的執行成果:

      把 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

 

以上任選其一來完成

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

 

 

繼續上網找程式碼來湊一湊?兜一兜?

 

如果網路上,這麼多資源可以讓你混啊混?

為什麼你會解不了功能?結不了案子?

 

還 不 清 醒 嗎?

 

沒有專業,沒有基礎

      混過今天,也沒有明天...........更沒有未來

 

 

 

相關文章:

 

[給讀者的話]軟土深掘#3 -- 關鍵不在問題的難易度,而是在發問的「態度」

 

 

 

 

老文重貼(I)

茂伯的經典好文 -- 讀書與上課
http://www.dotblogs.com.tw/billchung/archive/2010/11/28/19767.aspx

或許是網際網路太發達且資訊已經多到爆炸,
也許有人覺得要對一門電腦技術
精通 只要上網查查資料、看看別人的部落格就有機會達成這樣的目標。

我不否認應該有少數這樣具有特別天份的人,這類的人多半對於知識的組織與吸收是有獨到之處,
不過這也意味著
大部份的人 走這條路通常都會進到死胡同
很快地將會遭遇許多技術瓶頸的挑戰。
....詳見全文

 

老文重貼(II)

[感想] 在新技術面前,懂得謙卑......

http://www.dotblogs.com.tw/mis2000lab/archive/2009/06/22/8945.aspx

 

[感想]「指揮艇,組合!」....別把寫程式當成無敵鐵金剛,用「兜」的,不會有好下場~
http://www.dotblogs.com.tw/mis2000lab/archive/2009/05/08/8345.aspx

 

老文重貼(III)

[給初學者的話]完全沒基礎的話.....請不要來問我 ADO.NET的問題,謝謝~

http://www.dotblogs.com.tw/mis2000lab/archive/2011/01/14/20808.aspx

 

 


如果這樣的東西,可以隨便在網路上找個範本,修改一下就變成專家。
還能瞬間千變萬化.....

那麼在業界寫這些程式的人,都是傻蛋了
(人家初學者隨便一看就會,你要練習、磨練這麼久)

 

如果您是有心想學,那麼我能幫你的,通通端上台面了。

(1)  我偶爾有開班授課   (好的!您嫌太貴、太遠、時間不配合...等等,不想上....)
(2)  那麼我寫書、提供範例給大家學習   (好的!您也嫌貴....或是內容不合您意....)
(3)  那麼去圖書館借閱、去書店站著看一遍 總不用花錢吧,市面上書本很多的,總有合適您的

我能幫你的,通通提供出來了,
你還說不會,我也沒辦法了。

在你說「不會」之前,我還真想問問你對這門學問花了多少時間??

(更惡質的,是上面所有方法都 "" 試過。
    空著腦袋就找上門來了,然後跟乞丐一樣,伸手就是要「程式碼」。

      ....還加註一句「我很急,越快越好」)



有個笑話是這樣的:

      有一位虔誠信仰的老人某日遇上水災,不得以只好爬上屋頂待援

      這時,鄰居划船要帶他走。      老人說:「不用了,神明會來救我的。」
      
      過了一會兒,消防隊員來救人了,要帶他走。      老人還是這樣說:「不用了,神明會來救我的。」

      最後,軍隊出動了,要撤離大家。      老人還是婉拒了。
      他虔誠地等待神明展現奇蹟來救他。

     後來他還是在災難中往生了
     
     他死後見了神明,勃然大怒地說:「我信仰你一輩子,為何你見死不救??」

 



      神明說:「有啊!!!!!  我派了三組人馬去救你,你都拒絕啦~


 

我當然不是神明,
但是,您這樣的惡質「學習態度」,搞死的還是你自己。

故事中的老人,至少「花過時間」虔誠地信仰過,您呢????


如果您聽了我的話,好好認真學習了

(不管買誰的書?上誰的課?不管你是怎麼學會的.....

有了實力以後,找到工作以後,賺錢以後,......難道我會跟你抽成嗎?

還不都是你一個人獨享!誰也拿不走
 

你可以拒絕人家的建議,也可以走自己的路。
只要能學得起來~
       殊途同歸!

俗話說:條條大路通羅馬!
       每個人都會祝福你~

未必買我的書、上我的課,才是唯一管道。


只要你願意學習,很多人、事、物都能幫助你。

讓你從「不會」變成「會」,
隨著經歷增加,未來更有機會成為  高手!

 

 

但是千萬記住:  學  習  無  捷  徑!

 

 

 

我將思想傳授他人, 他人之所得,亦無損於我之所有;

猶如一人以我的燭火點燭,光亮與他同在,我卻不因此身處黑暗。----Thomas Jefferson

線上課程,遠距教學 (Web Form 49hr)  https://dotblogs.com.tw/mis2000lab/2016/02/01/aspnet_online_learning_distance_education_VS2015

線上課程,遠距教學 (ASP.NET MVC 75hr)  https://dotblogs.com.tw/mis2000lab/2018/08/14/ASPnet_MVC_Online_Learning_MIS2000Lab

ASP.NET MVC線上課程 第一天 免費看 (5.5小時) 

寫信給我,不要私訊 --  mis2000lab (at) yahoo.com.台灣  或  school (at) mis2000lab.net


ASP.NET遠距教學、線上課程(Web Form + MVC)。 第一天課程, "完整" 試聽。 

................   facebook社團   https://www.facebook.com/mis2000lab   ......................

................  YouTube (ASP.NET) 線上教學影片  https://www.youtube.com/channel/UC6IPPf6tvsNG8zX3u1LddvA/

 

Blog文章 "附的範例" 無法下載,請看 這裡 ...... https://dotblogs.com.tw/mis2000lab/2016/03/14/2008_2015_mis2000lab_sample_download

請看我們的「售後服務」範圍(嚴格認定)

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

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

[遠距教學、教學影片] ASP.NET (Web Form) 課程 上線了!MIS2000Lab.主講

事先錄製好的影片,並非上課時側錄!   觀看影片時,有如我「一對一」跟您面對面講課

 

ASP.NET MVC 5 線上教學

累積時數約 75小時...... 第一天(5.5小時)完整內容,"免費"讓您評估