今天講的這個也是坎尼一年前遇到的問題
但到最近才因同事的一句話而發現今天要示範的作法
首先 先來講解一下事件大綱
從前從前,坎尼的同事寫了支 UserControl--
用來顯示某種類別的下拉選單當然是
動態的從資料庫撈出來給使用者選擇
新增時一切運作正常
修改時卻因某種緣故 一直無法指定類別
(使用者新增時設定的)說到這邊 那個"某種緣故"請參考
UserControl 事件的觸發順序「原來是事件順序不同 所以在 Page_Load 時 UserControl 卻還沒產生下拉的選項」坎尼雖然當時知道了這個 卻不知道該如何解決
因為 Google 到的資料 好像都要去改寫事件的觸發順序?
(懶惰如坎尼 當然就放棄這個作法 自己重新在頁面上放個下拉選單重寫事件 XD)最近同事的一句:「不知道可不可以傳參數?」
坎尼
頭上閃過了新人類閃電符號 「そこだ!!!!」馬上去試驗了這個作法
以下來看範例
首先是 UserControl
(vs 2008的切割畫面真好用)畫面上有個
未繫結的 DropDownList
然後是執行頁
這邊分別做了來源頁 (有
RadioButtonList)

和目的頁 (只放
UserControl)

接著來看關鍵的UserControl裡的事件

由上圖可以看到
在
第一次執行時 會動態的加入下拉選項由於上述的動作 會造成 UserControl1.FindControl 的方式抓不到選項
所以坎尼加了個
mySelectedValue 屬性並在 UserControl 的 Page_Load 時去判斷有沒有值 再指定給 ddl
使用上很簡單 只要
把要選擇的 value 指定給 mySelectedValue 即可
下圖為實際執行畫面


如此就可以輕鬆的把值指定給 UserControl 中的動態控制項
不用再去 override 原本的 Page_Load 事件
最後是這次的範例程式
點我下載補充1.若是下拉選單非動態產生 (就是自己已經先加入)直接使用 FindControl 再去指定即可補充2.上述的方法適用於不會 AutoPostBack 的 UserControl若是引發了 PostBack 會造成 UserControl 的屬性值消失解法就是 頁面指定屬性的那段要寫在 Page_Load 裡讓頁面每次刷新時 再次去指定屬性給 UserControl