2014-01-30 7 views
0

У меня есть раскрывающийся список с 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(); 
    } 

Мой вопрос заключается в том, как сделать I цикл через это без необходимости вводить отдельный IF оператор каждый раз.

+0

Ну, у вас здесь много вариантов. Все они должны работать. –

ответ

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; 
+0

Спасибо, что отлично работает ... как я могу реализовать это в третьем выпадающем меню, которое не включает выбранное значение ddlSel1 или ddlSel2? – dawsonz

+1

Вы распространяете это: ddlSel2.DataSource = (из v в значениях где! V.Equals (ddlSel1.SelectedItem.Value) выберите v) .ToList(); Чтобы быть: ddlSel3.DataSource = (от V в значениях, где v.Equals (ddlSel1.SelectedItem.Value) && v.Equals (ddlSel2.SelectedItem.Value) выберите v!) .ToList(); И не забывайте также привязывать к третьей части. –

+0

Отличный материал, спасибо. – dawsonz

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 против нулевой.

Смежные вопросы