如何动态填充dropdownlist循环

时间:2014-01-30 16:17:24

标签: c# asp.net for-loop

我有一个下拉列表,有6种可能的选择。

<asp:DropDownList runat="server" ID="ddlSel1" 
        onselectedindexchanged="ddlSel1_SelectedIndexChanged" AutoPostBack="true">
        <asp:ListItem></asp:ListItem>
<asp:ListItem>One</asp:ListItem>
<asp:ListItem>Two</asp:ListItem>
<asp:ListItem>Three</asp:ListItem>
<asp:ListItem>Four</asp:ListItem>
<asp:ListItem>Five</asp:ListItem>
<asp:ListItem>Six</asp:ListItem>

</asp:DropDownList>

一旦用户从ddlSel1中选择了一个选项,我希望ddlSel2填充相同的列表,不包括在ddlSel1中选择的列表。

我是这样做的:

if (ddlSel1.SelectedItem.Value == "One")
    {
        string[] stringArray = { "", "TWO", "THREE", "FOUR", "FIVE", "SIX" };
        ddlSel2.DataSource = stringArray;
        ddlSel2.DataBind();
    }

我的问题是如何在不必每次都输入单独的IF语句的情况下循环使用它。

2 个答案:

答案 0 :(得分:1)

您可以从ddlSel1.DataSource获取原始源数组,然后使用Enumerable.Except与新string[]中的所选项目一起使用:

string[] originalSource = ddlSel1.DataSource as string[];
if(originalSource != null && ddlSel1.SelectedItem != null)
{
  ddlSel2.DataSource = originalSource.Except(new [] { ddlSel1.SelectedItem.Value.ToString() });
  ddlSel2.DataBind();
}

最好是检查originalSourceSelectedItem是否为null。

答案 1 :(得分:1)

这是使用Linq的替代方案:

首先在其他地方定义可能的值:

string[] values { "ONE", "TWO", ..., "SIX" };

然后在功能块内:

ddlSel2.DataSource = (from v in values where !v.Equals(ddlSel1.SelectedItem.Value) select v).ToList();
ddlSel2.DataBind();

不要忘记输入:

using System;
using System.Linq;