1

实际上,如果月份的值不是 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>

问题是:

如果我选择 March 或 may 或任何值为 31 jan 的项目显示在 to 而在其他情况下显示选定的项目。

4

2 回答 2

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 中了。只需从列表中的索引中确定月份数。

于 2011-01-17T12:53:03.170 回答
1

我做了一些研究,这不是一个不常见的问题。在 post-back 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 on '-' 来获取天计数值。

于 2011-01-17T12:53:49.067 回答