動態塞入圖片到Grid View Cell中

摘要:動態塞入圖片到Grid View Cell中

  最近我在製作專案時,遇到一個需求,是在 GridView 資料 Bind 完成之後,動態再某一列的某些不固定的 Cell 中插入一張圖片,還有一些物件如:Button,並且它的欄位不能設定死的,必須要將 AutoGenerateColumn 設定為 True,有點像是在瀏覽手機網站時,有些網站會提供比較手機之間的差異的功能,讓你選擇你要比較的手機,按下開始比較,然後跳到另外一張頁面,再將選擇到的手機屬性全部列出,並在每個欄位的最上方會插入一張圖片像這樣:http://www.eprice.com.tw/mobile/compare/ 
 
 
  一開始我是直接將 Button、Image、Radio Button 的 HTML 碼塞給某一個 Cell,但是會發生它直接將我輸入的 HTML 轉換為文字再將他輸出在那個 Cell 中,而並不是我想要的按鈕,後來感謝公司同事提供的方法,就是想辦法在 AutoGenerateColumn 完成後,把自動產生出來那個欄位的 HtmlEncode 屬性值設定為 False,這樣它就不會幫我自動 Parse 成字串,但是這個方法要轉來轉去,而且很麻煩,又容易發生轉換失敗的問題,最重要的是它就失去當時 HtmlEncode 屬性的意義,該屬性主要是用來防止駭客將我們的網站變成為釣魚網站。
 
  最後找到另一個方法,非常簡單,可能有許多人都知道了,但是還是分享一下,就是在 GridView Bind 完成後,會觸發GridView RowDataBound的事件,在RowDataBound的事件代碼中可以取得目前 Bind 的 Cell 這個 Cell 本身就是 Control Collection,所以一定有提供 Controls 的功能,既然是Collection一定就會提供有加入跟移除的機制,所以我們只需要加我們要加入的控制項宣告好直接塞給他就可以了。下面是範例程式碼,希望能有助於各位。
 

 

 

 

 
HtmlButton ButtonTemp = New HtmlButton();
ButtonTemp.Text = ...;
....
....
....
e.Row.Controls[[CELL INDEX]].Controls.Add(ButtonTemp);