如何在ASP.NET中使DropDownList控件显示一些粗体项

6
我正在使用ASP.Net中的自定义DropDownList控件,并且有一个请求要求在列表中显示某些项目时使用粗体字体(注意 - 该控件继承自CompositeDataBoundControl,因此可以进行数据绑定...不是DropDownListBox)。该控件绑定到一个表格,表格中有一个名为IsUsed的列 - 如果将其设置为true,则应以粗体呈现列表中相应的项目。(应注意的是,这将仅在FireFox中查看。)
我的经验都是在中间/后端层,因此演示层对我来说非常新 - 有人可以指点我吗?我的最初想法是,在自定义控件的某个地方,我将可以访问从数据源返回的所有行,我可以循环等等,但我不确定是否可能...还有RenderContents可以覆盖...看起来很有趣!
4个回答

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属性。

好的,回到我的控件的RenderContents方法...这个方法肯定会为列表中的每个项目输出HTML?因此根据你所说的,我应该能够为每个单独的项目应用样式? - james lewis
任何服务器端控件在渲染后都会变成 HTML 控件。因此,您可以对其应用任何适当的 HTML 方法/工具/方法。 - abatishchev

1
无论您在服务器端使用什么控件,它都会以 HTML 的形式呈现在客户端浏览器中,标准的 HTML 下拉列表不支持样式化其内容。您可以选择 JavaScript 或 jQuery 自定义下拉列表控件来代替。

无论我能否访问数据,目前都无关紧要,因为即使对内容应用某种样式,也不会产生任何效果。 - james lewis
1
abatishchev的解决方案适用于想要使用粗体字体制作特定条目的情况。但是,如果你想更改部分文本,则无法使用服务器端控件完成。 - Elangovan
我认为这取决于文本的呈现方式 - 在原始HTML中它的外观如何。如果您可以使用HTML标记作为控件的内部文本,那么您可能应该能够使特定文本加粗。即它将看起来像这样:<span>我的<b>特定</b>文本</span> - abatishchev
标准的HTML下拉列表支持颜色样式,这将起作用:<option style="background-color:Black;color:White">测试</option> - MK.

0

好的,我想我已经回答了自己的问题,但这似乎不是很优雅。

我可以编写一个新的存储过程来返回我需要在列表中显示的数据,该存储过程将返回ID和DESCRIPTION。然而,描述将是描述加上TRUE或FALSE(取决于表中的IsUsed标志)。然后在RenderContents中,我可以拆分描述字符串,解析布尔值并添加样式属性,如果布尔值为true,则使文本加粗...


我会将描述和IsUsed字段分开,这样在RenderContents中就不需要再拆分字符串了。你不希望数据层关注展示问题。有没有什么原因不能返回第三个字段呢? - earthling
是在自定义控件中的代码分割字符串,但我明白你的意思。我只是对数据绑定不够了解 - 所以无论我的存储过程返回多少个字段,因为我可以在下拉列表的代码中随意选择处理它们,所以这并不重要,对吗?明天在办公室时,我会试一试,这绝对比分隔符字符串更优雅! - james lewis
看起来我不能这样做... 在RenderContents中,我似乎只能访问ddl的Items属性 - 这些项只返回存储过程中的描述和ID,我刚添加的第三个字段被忽略了... - james lewis

0
我在Chrome中尝试了以下代码,它确实有效:(使顶部项目加粗。)
ddlTest.Items.FindByValue("0").Attributes.Add("style", "font-weight:bold");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接