Osh*_*rib 2 c# asp.net drop-down-menu
我希望我的下拉列表显示第一个值:“-choose car-”
我以这种方式成功:
protected void ddl1_DataBound(object sender, EventArgs e)
{
Convert.ToInt32(ddl1.SelectedValue);
ddl1.Items.Insert(0, new ListItem("-Choose car-", "-Choose car-" ));
}
Run Code Online (Sandbox Code Playgroud)
没关系,“-choose-”放在首位,但是现在的问题是,例如,如果我有值,则下拉列表显示如下:
-Choose car-
Subaro
Fiat
Honda
Run Code Online (Sandbox Code Playgroud)
我进入该站点时显示的第一个值是Subaro,要看到-choose car-,用户需要打开下拉列表,然后他会首先看到-choose car-。从一开始就从页面加载开始--choose car-将在页面加载后显示在ddl上。我在哪里弄错了代码?
我尝试使用的项目列表,AppendDataBoundItems = "true"但出现错误,当我成功时,问题与我之前说的相同。
使用AppendDataBoundItems属性使true您处在正确的轨道上,如果要绑定列表,则应将其设置为。
您的标记应如下所示
<asp:DropDownList runat="server" ID="ddl1" AppendDataBoundItems="true">
<asp:ListItem Text="-Choose car-" />
</asp:DropDownList>
Run Code Online (Sandbox Code Playgroud)
并且您后面的代码可能已经看起来像这样
ddl1.DataSource = [your datasource goes here];
ddl1.DataBind();
Run Code Online (Sandbox Code Playgroud)
这会将“ 选择汽车文字”作为第一个选项放在下拉列表中,并将其余选项附加在其下方。
现在,对于为什么看到现象的更有趣的部分(未选择第一项)。如果您看一下SelectedIndex使用JustDecompile之类的工具(不隶属于Telerik,只是碰巧使用了他们的工具)的实现,您将看到如下代码:
public int SelectedIndex
{
get
{
int num = 0;
num++;
while (num < this.Items.Count)
{
if (this.Items[num].Selected)
{
return num;
}
}
return -1;
}
set
{
// stuff you don't care about
this.ClearSelection();
if (value >= 0)
{
this.Items[value].Selected = true;
}
// more stuff you don't care about
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,索引不会存储在任何地方,它是根据Selected属性设置为true的项每次计算的。当您将SelectedIndex标记中的设置为0并与数据源进行数据绑定时,对于您的情况,它将选择该列表中的第0个项目Subaro。当您在列表的开头插入新项目时,Subaro仍将其标记为选定项目,这就是为什么在页面加载时会看到已选定而不是的原因Choose car。如果要Choose car使用代码将其标记为选定的项目,则必须在对数据进行下拉列表数据绑定后执行此操作。 请注意,这只是DropdownList工作原理的实现细节。它可能会在将来的ASP.NET版本中更改,因此请不要编写以此方式工作依赖它的代码。
| 归档时间: |
|
| 查看次数: |
28439 次 |
| 最近记录: |