如何在DropDownList中显示选定的索引?

时间:2011-01-17 11:51:07

标签: asp.net drop-down-menu list.selectedvalue

实际上我在第一个列表中显示选择月份的月份,如果月份的值不是31,则显示在顶部,否则它显示jan在顶部如何显示另一个?

这是代码:

代码背后:

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
    DropDownList2.Items.Clear();
    for (int i = 1; i <= int.Parse(DropDownList1.SelectedValue); i++)
    {
        DropDownList2.Items.Add(new ListItem("" + i));
    }
}

设计师来源:

<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
    <asp:ListItem Value="31">Jan</asp:ListItem>
    <asp:ListItem Value="29">Feb</asp:ListItem>
    <asp:ListItem Value="31">Mar</asp:ListItem>
    <asp:ListItem Value="30">April</asp:ListItem>
    <asp:ListItem Value="31">May</asp:ListItem>
    <asp:ListItem Value="30">June</asp:ListItem>
    <asp:ListItem Value="31">July</asp:ListItem>
</asp:DropDownList>
<asp:DropDownList ID="DropDownList2" runat="server">
</asp:DropDownList>

问题是:

如果我选择游行或者可能或者任何值为31 jan的项目显示在,而在其他情况下会显示所选项目。

2 个答案:

答案 0 :(得分:2)

ListItems的值应该是唯一的。

默认选择的项目是Jan(值= 31),因此当您点击具有其他值(29和30)的项目时,一切都会正常工作。

当您点击Mar,May,July(值= 31)时,Jan将被选中。

要实现您想要的行为,请使用其他方法。


最佳解决方案是:

using System.Linq;

int count =  DateTime.DaysInMonth(
     DateTime.Today.Year,
     int.Parse(DropDownList2.SelectedIndex + 1)); // sic!

DropDownList2.Items.AddRange(
    Enumerable.Range(1, count)
        .Select(i => new ListItem(i.ToString()))
        .ToArray());

所以你不需要硬编码任何东西!一切都已经在.NET FCL中了。只需将月份的数字从它的索引中确定到列表中即可。

答案 1 :(得分:1)

我做了一些研究,这不是一个不寻常的问题。在回发后,asp.net将显示列表中包含所选值的第一项。我发现它的唯一方法是使所有值都是唯一的,例如:

<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
    <asp:ListItem Value="Jan-31">Jan</asp:ListItem>
    <asp:ListItem Value="Feb-29">Feb</asp:ListItem>
    <asp:ListItem Value="Mar-31">Mar</asp:ListItem>
    <asp:ListItem Value="April-30">April</asp:ListItem>
    <asp:ListItem Value="May-31">May</asp:ListItem>
    <asp:ListItem Value="June-30">June</asp:ListItem>
    <asp:ListItem Value="July-31">July</asp:ListItem>
</asp:DropDownList>

然后在DropDownList1_SelectedIndexChanged事件中使用' - '上的string.split来获取日计数值。