台灣最大程式設計社群網站
線上人數
1439
 
會員總數:246690
討論主題:190103
歡迎您免費加入會員
討論區列表 >> C# >> 要如使GridView中的ImageButton另開某個檔案,編輯的時候可以使用FileUpload
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
要如使GridView中的ImageButton另開某個檔案,編輯的時候可以使用FileUpload
價值 : 60 QP  點閱數:869 回應數:5
樓主

moneykurt
門外漢
0 6
164 15
發送站內信

我建立了一個GridView,有個欄位是『報名資訊』,在什麼都沒改的情形下是管理者上傳word、pdf等檔案的名稱;

由於我不想讓使用者看到那些檔案取的怪名稱,所以想用ImageButton顯示圖片,按下之後另開word檔案!

1.
我在網路有看到另開視窗的方法,在OnClientClick中打入『window.open('123.doc')』,但是『123.doc』的值應該是要取自資料庫,要如何做呢?

2.
因為管理者是有編輯功能的,所以我把FileUpload物件放在GridView中,讓管理者可以上傳檔案,但是相同的程式下,點選button卻沒有上傳!
為何會沒有反應阿?如果我要刪除原本檔案,那我該如何做呢?


搜尋相關Tags的文章: [ C# ] , [ ASP.NET ] , [ GridView ] , [ ImageButton ] , [ FileUpload ] , [ 另開檔案 ] ,
本篇文章發表於2017-08-18 16:07
1樓
作者回應

moneykurt
檢舉此回應
第二個問題有進展了~
在GridView中還是要用FindControl才行抓取到FileUpload元件,我也利用FindControl抓取為一值更新資料庫

//在button_click時先抓FileUpload控制項
FileUpload FU2=(FileUpload)this.GridView1.Rows[GridView1.EditIndex].FindControl("FU2");

====上傳程式略過====

//檔案傳至Server路徑
try{

//為了要即時變更也要抓Textbox及id
TextBox newfilename =(TextBox)this.GridView1.Rows[GridView1.EditIndex].FindControl("newfilename");
Label id =(Label)this.GridView1.Rows[GridView1.EditIndex].FindControl("id");

=====設定資料庫略過====

//sql語法 利用抓到的id做Where
String insertle="UPDATE HR SET poster='" + filename + "' WHERE id='" + id.Text + "'";

//在最後將檔案名稱的Text更新
newfilename.Text=filename;

}

問題來了~直接用FindControl抓取id感覺好像是非正統的做法,有比較好的方式可是抓到該編輯項之類的嗎?
例如:GridView1.Rows[GridView1.EditIndex].ToString()...之類的?

本篇文章回覆於2017-08-20 17:01
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

moneykurt
檢舉此回應
如果第一個問題也用FindControl來解決的話↓

我在『Item Template』新增了ImageButton,當ImageButton Click時要抓取該項某欄位Label值,我要如何FindControl該Row的Control["ID"]呢?
本篇文章回覆於2017-08-20 18:10
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

moneykurt
檢舉此回應
第一個問題我這邊找到用FindControl方法解決了,但如果有更好的方式也可以PO上來大家分享

我的方法↓

1.先在ImageButton屬性的Command Name命名『findid』

2.在GridView1的RowCommand中寫個if判斷

判斷程式如下↓

if(e.CommandName="findid"){

Label id=(Label)((Control)e.CommandSource).FindControl("firstid"); //firstid是我要取的控制項ID

//此時我已經取得該項目的唯一值,我就直接利用這個直做where條件

=====資料庫連線等程式略過=====

//sql語法
String sqlstr="SELECT * FROM [training] WHERE id='" + id.Text + "'";

//另開是窗我用response.write寫script
Response.Write("<script language='javascript'>window.open('data/" +Convert.ToString(readerle["poster"]) +"');</script>")



}
本篇文章回覆於2017-08-20 19:39
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

topcat
捐贈 VP 給 topcat 檢舉此回應
您好

感恩您熱心的提供您找到的做法
能夠大家彼此交流,真好

^_^

小喵看到幾個問題,與您交流一下

首先,您的SQL語法有SQL Injection的問題
如果被攻擊,您的系統,甚至主機、資料
都可能被毀滅
建議您這部分一定要優先處理

SQL Injection 資料隱碼攻擊

---
此外,您撰寫Javascript的方式使用Response.Write
這會再有些狀況下,無法運作
請您參考以下91大的這一篇文章

[修練營 ASP.NET]如何執行一段javascript

---
另外
管理者有編輯權限,編輯時需要上傳檔案
那麼,是否需要多筆編輯與上傳呢?
如果不需要,只需單筆編輯的話
是否考慮用單筆維護的方式來處理
例如透過Detail View或者Form View來處理

這樣應該會相對單純一些


以上資訊提供您參考
^_^
本篇文章回覆於2017-08-21 08:30
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
作者回應

moneykurt
檢舉此回應
恩~我這邊有看了這兩個問題

SQL injection部分

我這邊有參考了↓這種應該可以防範一些吧?
Paramenters
使用Parameters 帶參數的方式:
strSQL = ("select * from member where userid=@user AND passwd=@password1")
cmmd = New SqlCommand(strSQL, conn)
cmmd.Parameters.AddWithValue("@user", TextBox1.Text)
cmmd.Parameters.AddWithValue("@password1", TextBox2.Text)

Javascript部分我在執行程式的時候多少有注意到CSS有些問題,大大提到正好給我一個方向找
我參考了您給的網址,我應該會使用第一種,將Function集中到js

p.s 由於休假中~暫時無法測試,有結論在PO上來讓大家知道
本篇文章回覆於2017-08-24 18:39
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.