摘要: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
老文重貼(III)
[給初學者的話]完全沒基礎的話.....請不要來問我 ADO.NET的問題,謝謝~
http://www.dotblogs.com.tw/mis2000lab/archive/2011/01/14/20808.aspx
如果這樣的東西,可以隨便在網路上找個範本,修改一下就變成專家。
還能瞬間千變萬化.....
那麼在業界寫這些程式的人,都是傻蛋了
(人家初學者隨便一看就會,你要練習、磨練這麼久)
如果您是有心想學,那麼我能幫你的,通通端上台面了。
(1) 我偶爾有開班授課 (好的!您嫌太貴、太遠、時間不配合...等等,不想上....)
(2) 那麼我寫書、提供範例給大家學習 (好的!您也嫌貴....或是內容不合您意....)
(3) 那麼去圖書館借閱、去書店站著看一遍 總不用花錢吧,市面上書本很多的,總有合適您的
我能幫你的,通通提供出來了,
你還說不會,我也沒辦法了。
在你說「不會」之前,我還真想問問你對這門學問花了多少時間??
(更惡質的,是上面所有方法都 "沒" 試過。
空著腦袋就找上門來了,然後跟乞丐一樣,伸手就是要「程式碼」。
....還加註一句「我很急,越快越好」)
有個笑話是這樣的:
有一位虔誠信仰的老人某日遇上水災,不得以只好爬上屋頂待援
這時,鄰居划船要帶他走。 老人說:「不用了,神明會來救我的。」
過了一會兒,消防隊員來救人了,要帶他走。 老人還是這樣說:「不用了,神明會來救我的。」
最後,軍隊出動了,要撤離大家。 老人還是婉拒了。
他虔誠地等待神明展現奇蹟來救他。
後來他還是在災難中往生了
他死後見了神明,勃然大怒地說:「我信仰你一輩子,為何你見死不救??」
神明說:「有啊!!!!! 我派了三組人馬去救你,你都拒絕啦~」
我當然不是神明,
但是,您這樣的惡質「學習態度」,搞死的還是你自己。
故事中的老人,至少「花過時間」虔誠地信仰過,您呢????
如果您聽了我的話,好好認真學習了
(不管買誰的書?上誰的課?不管你是怎麼學會的.....)
有了實力以後,找到工作以後,賺錢以後,......難道我會跟你抽成嗎?
還不都是你一個人獨享!誰也拿不走
你可以拒絕人家的建議,也可以走自己的路。
只要能學得起來~
殊途同歸!
俗話說:條條大路通羅馬!
每個人都會祝福你~
未必買我的書、上我的課,才是唯一管道。
只要你願意學習,很多人、事、物都能幫助你。
讓你從「不會」變成「會」,
隨著經歷增加,未來更有機會成為 高手!
但是千萬記住: 學 習 無 捷 徑!
我將思想傳授他人, 他人之所得,亦無損於我之所有;
猶如一人以我的燭火點燭,光亮與他同在,我卻不因此身處黑暗。----Thomas Jefferson
線上課程教學,遠距教學 (Web Form 約 51hr) https://dotblogs.com.tw/mis2000lab/2016/02/01/aspnet_online_learning_distance_education_VS2015
線上課程教學,遠距教學 (ASP.NET MVC 約 140hr) https://dotblogs.com.tw/mis2000lab/2018/08/14/ASPnet_MVC_Online_Learning_MIS2000Lab
寫信給我,不要私訊 -- mis2000lab (at) yahoo.com.tw 或 school (at) mis2000lab.net
(1) 第一天 ASP.NET MVC5 完整影片(5.5小時 / .NET 4.x版)免費試聽。影片 https://youtu.be/9spaHik87-A
(2) 第一天 ASP.NET Core MVC 完整影片(3小時 / .NET Core 6.0~8.0)免費試聽。影片 https://youtu.be/TSmwpT-Bx4I
[學員感言] mis2000lab課程評價 - ASP.NET MVC , WebForm 。 https://mis2000lab.medium.com/%E5%AD%B8%E5%93%A1%E6%84%9F%E8%A8%80-mis2000lab%E8%AA%B2%E7%A8%8B%E8%A9%95%E5%83%B9-asp-net-mvc-webform-77903ce9680b
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 MVC => .NET Core MVC 線上教學 ...... 第一天課程 完整內容 "免費"讓您評估 / 試聽
[遠距教學、教學影片] ASP.NET (Web Form) 課程 上線了!MIS2000Lab.主講 事先錄好的影片,並非上課側錄! 觀看時,有如「一對一」面對面講課。