2010-05-25 66 views
5

我正在使用ASP.Net中的自定義DropDownList控件,並且要求使用加粗的字體顯示列表中的某些項目(NOTE - 該控件從CompositeDataBoundControl繼承,因此它可以被數據綁定...不是DropDownListBox)。該控件綁定到一個表,並且表中有一個名爲IsUsed的列 - 如果將其設置爲true,則列表中的相應項應該呈現爲粗體。 (這裏應該指出,這隻會在FireFox中看到。)如何使DropDownList控件以粗體顯示一些項目ASP.NET

我的經驗都在中間\後端層,所以表現層對我來說是非常新的 - 有人能指點我嗎?我最初的想法是,在自定義控件的某個地方,我可以訪問從數據源返回的所有行,我可以循環訪問等,但我​​不確定是否有可能......還有RenderContents,我可以重寫...看起來很有趣!

回答

1

好的我認爲我已經回答了我自己的問題,但它看起來不太優雅。

我可以編寫一個新的存儲過程來返回我需要顯示在列表中的數據,這些數據將返回ID和DESCRIPTION。但是,描述將是描述加上TRUE或FALSE(取決於表中的標誌IsUsed)。然後在RenderContents我可以拆分描述字符串,解析布爾,並添加一個樣式屬性使文本加粗,如果布爾是真的...

+0

我將我們的描述和IsUsed字段分開,然後你不需要在RenderContents中拆分字符串。 **你不希望你的數據層擔心呈現**。有什麼理由不能讓第三個領域被退回? – earthling 2010-05-25 16:45:10

+0

這是自定義控件中分割字符串的代碼,但我明白了你的觀點。我只是不太瞭解數據綁定 - 因此我的SP返回的域有多少並不重要,因爲我可以在下拉列表中選擇正確的代碼來處理它們。當我明天在辦公室時,我會放棄這一點,明確地比分隔字符串更優雅! – 2010-05-25 21:52:28

+0

看起來我不能這樣做......在RenderContents中,我似乎只能訪問ddl的Items屬性 - 這些項目只有從存儲過程返回的描述和id,我剛剛添加的第三個字段是忽略... – 2010-05-26 09:19:54

1

無論您在服務器端使用哪種控件,它都將在客戶端瀏覽器中呈現爲HTML,而標準HTML下拉列表不支持樣式化其內容。不要這樣做,你可以使用JavaScript或jQuery自定義下拉列表控件。

+0

因此,我可以得到的數據或不是現在,因爲即使如果我對內容應用某種樣式,它將不起作用? – 2010-05-25 10:01:52

+1

如果您想用粗體字製作特定的條目,abatishchev的解決方案可以工作。但是,如果您想更改部分文本,則無法使用服務器端控件完成。 – Elangovan 2010-05-25 10:09:23

+0

我認爲這取決於文本如何呈現 - 它在原始HTML中看起來如何。如果您可以使用HTML標記作爲控件的內部文本 - 比您可能應該能夠使某個文本變爲粗體。即它看起來就像這樣:'特別文本' – abatishchev 2010-05-25 10:17:33

3

這是你該怎麼辦在後臺代碼所需要的:

var item = new ListItem("MyItem"); 
item.Attributes.Add("style", "font-weight: bold"); 

var list = FindControl("DropDownList1"); 
list.Items.Add(item); 

任何控制從System.Web.UI.Control繼承有財產Attributes,您可以使用添加或追加style屬性。

+0

好吧,回到我的控件的RenderContents方法......當然,這會爲列表中的每個項目輸出HTML?因此根據你所說的話,我應該能夠將風格應用於每個單獨的項目? – 2010-05-25 10:08:41

+0

渲染後,任何服務器端控件都會變爲HTML。所以你可以應用任何適當的HTML方法/工具/方法 – abatishchev 2010-05-25 10:13:20