SqlDataSource 控制項 'sdsBaseS' 沒有命名容器。請確認呼叫 DataBind 之前,控制項已加入頁面中。
此篇文章不是提問~
這篇不是提問的文章、解法在最下方!
不知各位有沒有遇到過這個問題呢?
※sdsBaseS是一個SqlDataSource的控制項,而我的sdsBaseS是與一個DataList動態繫結。
先說明一下我的設計動機。
我設計了一個考試系統,由於整張考卷完全動態產生,例如該張考卷有120題,但我預計出100題,那麼我會由120題亂數抽出100題,再將這100題分類後亂數排列,最後再將作答的部份亂數排列(選擇、複選題會用到),而考卷可同時出是非、選擇、複選、問答。
以下是我設計的畫面:
畫面中,我使用三層的DataList的架構,第一層是考題類別會依題目來出現是非題、選擇題、複選題、問答題等字樣,題目有才會出現,第二層就是題目了,會依照第一層的類別來出現,錯誤的訊息是由此層出現的樣子,第三層是答案了,也會依照第一層來決定出現的方式。
以下是我由Web所顯示出來的畫面:
通常我遇到錯誤,就會用步階偵錯(F10或F11)慢慢按,但是這個錯誤造成的原因非常難用步階偵錯找出來,我也有去爬文,但可能這個問題比較少見吧,只好自己找錯誤囉,其實我承認是我腦殘了,觀念沒搞清楚,由於DataList是主動式元件,當有資料預先繫結時,不需要再做DataBind,它自己就會先DataBind,我在要產生考卷的地方,有下一個「dlCategory.DataBind();」才會導致這個錯誤的發生。
但實際上,一般來說,多下DataBind其實是不會錯的,我的想法是想要更新成最新的資料,重點在於我有使用到「_ItemDataBound」的事件,而這個事件又剛好有對dlBaseS做動態繫結及DataBind的動作,那等於我做兩次,造成先後順序的錯誤,至於其中運做的原理,我也半知而已,大約知道為什麼及解決方法,但也無法完整的說出「為什麼」,可能要請高手來講解了~
因為我是「半自動、半手動」的做法,以下是我_ItemDataBound的事件內容:
還有一個重點,如果您的資料跟我一樣是動態產生的,那記得要將EnableViewState變成false,讓前一次的畫面清空哦。
※主動式元件:由於大部份的元件都是主動式元件,資料經繫結不需要DataBind就會自動DataBind。
聰明人會抓住每一次機會,更聰明的人會不斷創造新機會。
每一秒都有千萬種可能,包括奇蹟!
技術永遠不是問題!
座右銘:有電腦的地方,就找得到我!!