我有一个下拉列表,有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语句的情况下循环使用它。
答案 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();
}
最好是检查originalSource
和SelectedItem
是否为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;