gpt4 book ai didi

c# - 下拉列表第一个值显示 "choose"

转载 作者:行者123 更新时间:2023-11-30 19:32:11 25 4
gpt4 key购买 nike

我希望我的下拉列表显示第一个值:“-选择汽车-”

我这样成功了:

protected void ddl1_DataBound(object sender, EventArgs e)  
{
Convert.ToInt32(ddl1.SelectedValue);
ddl1.Items.Insert(0, new ListItem("-Choose car-", "-Choose car-" ));
}

没关系,“-choose-”排在第一位,但现在的问题是,如果我有值,例如,下拉列表显示如下:

-Choose car-
Subaro
Fiat
Honda

当我进入该站点时,显示的第一个值是 Subaro,要看到“选择汽车”,用户需要打开下拉列表,然后他将首先看到“选择汽车”。我怎样才能从一开始就做到这一点,从页面加载 - 选择汽车 - 将显示在页面加载的 ddl 中。我在代码哪里错了?

我用 AppendDataBoundItems = "true" 尝试了项目列表,但我得到了一个错误,当我成功时,问题和我之前说的一样。

最佳答案

您在使用 AppendDataBoundItems 方面走在了正确的轨道上属性,如果您要对列表进行数据绑定(bind),则应将其设置为 true

您的标记应如下所示

<asp:DropDownList runat="server" ID="ddl1" AppendDataBoundItems="true">
<asp:ListItem Text="-Choose car-" />
</asp:DropDownList>

你后面的代码可能看起来像这样

ddl1.DataSource = [your datasource goes here];
ddl1.DataBind();

这会将选择汽车文本作为下拉列表中的第一个选项,并将其余选项附加在其下方。


现在更有趣的部分是为什么您会看到您所看到的行为(第一项未被选中)。如果你看一下 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
}
}

如您所见,索引并未存储在任何地方,而是每次根据哪个项目的 Selected 属性设置为 true 来计算它。当您在标记中将 SelectedIndex 设置为 0 并数据绑定(bind)您的数据源时,它将选择该列表中的第 0 个项目,在您的例子中为 Subaro。当您在列表的开头插入一个新项目时,Subaro 仍被标记为已选项目,这就是为什么当页面加载时,您看到的是已选项目而不是 Choose car。如果您想使用代码将 Choose car 标记为所选项目,则必须在对下拉列表进行数据绑定(bind)后执行此操作。 请注意,这只是 DropdownList 工作原理的一个实现细节。它可能会在 ASP.NET 的 future 版本中发生变化,因此不要编写依赖于它以这种方式工作的代码。

关于c# - 下拉列表第一个值显示 "choose",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5856359/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com