2010-06-01 20 views
2

我目前正在使用從DropDownList繼承的控件(它有一些額外的功能與這個問題並不真正相關,但它給了我一個很好的地方來實現我討論的額外內容)。DropDownList:DataTextField,DataValueField ... DataEnabledField?

我們正在使用數據綁定,DataTextField和DataValueField工作得很好。但是,我發現自己需要一個類似的字段來控制是否啓用該項目。 (我已經重寫了控件的RenderContents方法,因此它正確地呈現了未啓用的項目,因爲DropDownList默認不會這樣做。)

因此,我想知道如何重寫DropDownList的數據綁定所以它的行爲與正常情況完全一樣,除了每個DataSource項目的其他字段應用於每個ListItem的Enabled屬性。 (注意:我要綁定的字段不是直接的布爾值,並且沒有顯式/隱式轉換爲布爾值,所以我可能會將它作爲字符串「傳遞」。)

回答

0

DropDownList控件的綁定邏輯實際上是在其基類ListControl中實現的。你需要覆蓋的方法是PerformDataBinding(IEnumerable的)

你可以看一下在反射器的默認實現,以確保您不會錯過任何東西,但它是受保護的虛擬,所以你不應該有任何問題。只需調用base,然後添加你需要的邏輯。

+0

感謝您指點我正確的方向;我現在得到了這個做我想要的:)在調用基礎之後,我假設列表的Items與DataSource IEnumerable的順序相同,但這似乎工作。 – Rawling 2010-06-01 10:20:57

+0

嘿,在檢查Reflector之後,我看到我甚至不需要重寫RenderContents,因爲它實際上關注了Enabled字段 - 我之前測試過的時候一定會搞砸的。 – Rawling 2010-06-01 10:29:36

+0

我很高興你讓它工作:) – Slavo 2010-06-01 10:58:27

相關問題