【发布时间】:2009-09-04 13:06:01
【问题描述】:
我有一个下拉列表,其中包含用于生成报告的多个选项。根据帐户类型,用户有某些选项应该可见但不可选择(作为他们升级的动力)。
我想知道是否有人知道实现此目的的方法。
权限已经到位,我只需要帮助使某些项目无法选择。
任何帮助将不胜感激。
【问题讨论】:
我有一个下拉列表,其中包含用于生成报告的多个选项。根据帐户类型,用户有某些选项应该可见但不可选择(作为他们升级的动力)。
我想知道是否有人知道实现此目的的方法。
权限已经到位,我只需要帮助使某些项目无法选择。
任何帮助将不胜感激。
【问题讨论】:
您可以在 html <select> 中禁用 <option> 标记
见:http://www.htmlref.com/reference/appa/tag_option.htm
在 asp.net 中:
<asp:DropDownList ID="MyDropDownList" runat="server">
<asp:ListItem Text="Standard Report" Value="SR"></asp:ListItem>
<asp:ListItem Text="Enterprise Report" Value="ER" disabled="disabled"></asp:ListItem>
</asp:DropDownList>
【讨论】:
不确定您是否仍在为此寻找答案?
Mark Redman's answer 如果你可以在 aspx 页面中定义选择列表,那就太好了,但是如果你动态绑定下拉列表,显然你不能。
我成功地使用以下方法实现了您所追求的结果(不确定是否支持完整的浏览器,但适用于较新版本的 IE)
foreach ( ListItem item in dropdownlist.Items )
{
if ( [item should be disabled condition] )
{
item.Attributes.Add( "disabled", "disabled" );
}
}
这将使您的禁用元素变灰。
【讨论】:
Page_Load 事件中添加您建议的代码,但我想要禁用的ListItem 项目(选择)仍未灰显。知道为什么吗?
您可以使用必填字段验证器并将初始值属性设置为下拉列表中您不想选择的项目的值。
<asp:RequiredFieldValidator ID="RequiredFieldValidator" runat="server"
ErrorMessage="" ControlToValidate="DropDown" InitialValue="Unselectable Item"></asp:RequiredFieldValidator>
【讨论】:
Adam Fox 的这个 sn-p 绝对正确:
foreach ( ListItem item in dropdownlist.Items )
{
if ( [item should be disabled condition] )
{
item.Attributes.Add( "disabled", "disabled" );
}
}
唯一需要注意的是,它需要在 OnDataBound 事件中调用,而不是 OnDataBinding 事件(这在生命周期中太早了)。
【讨论】:
你可以试试这个
myDropDownList.Items.FindByValue("ReportValue").Attributes.Add("disabled", "disabled");
【讨论】:
如果这是 HTML 控件,那么很容易使其不可选择。只需使用 "optgroup" HTML 元素。例如
<select>
<optgroup label="Hardware"></optgroup>
<option id="1">mouse</option>
<option id="2">keyboard</option>
<option id="3">monitor</option>
<optgroup label="Software"></optgroup>
<option id="Option1">windows XP</option>
<option id="Option2">MS Office</option>
<option id="Option3">VStudio</option>
</select>
(注意:这适用于 IE/firefox)
谢谢 苏希尔金德
【讨论】:
optgroup 的用途。
我遇到了同样的问题,并尝试使用发布的第一个答案,但它对我不起作用。然后我将第一个帖子更改为:
foreach ( ListItem item in dropdownlist.Items )
{
if ( [item should be disabled contdition] )
{
item.Enabled = false;
}
}
它对我有用。
【讨论】:
您可以在客户端使用选择项目时触发的处理程序来执行此操作。然后取消选择该项目和/或显示错误消息。
【讨论】:
试试这个
myDropDownList.Items.FindByValue("ReportValue").Enabled = false;
这将禁用列表中的项目,基本上不在列表中显示它。
"ReportValue" = 要禁用的项目的值。
【讨论】: