2011-01-19 2 views
0

У меня есть три DropDown List Controls.each выпадающее меню содержит статические значения 1,2,3,, что мне нужно сделать, когда элемент выбран в первом выпадающем списке (при событии SelectedIndexChanged), то те же элементы должны выбирается в других двух раскрывающихся спискахВыбор списка DropDown

+1

хорошо! Так что же не сработало? – Shoban

ответ

1

Вот что вы делаете.

В коде ASPX:

<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddl_SelectedIndexChanged"> 
    <asp:ListItem Text="1" Value="1" /> 
    <asp:ListItem Text="2" Value="2" /> 
    <asp:ListItem Text="3" Value="3" /> 
    <asp:ListItem Text="4" Value="4" /> 
</asp:DropDownList> 
<asp:DropDownList ID="DropDownList2" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddl_SelectedIndexChanged"> 
    <asp:ListItem Text="1" Value="1" /> 
    <asp:ListItem Text="2" Value="2" /> 
    <asp:ListItem Text="3" Value="3" /> 
    <asp:ListItem Text="4" Value="4" /> 
</asp:DropDownList> 
<asp:DropDownList ID="DropDownList3" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddl_SelectedIndexChanged"> 
    <asp:ListItem Text="1" Value="1" /> 
    <asp:ListItem Text="2" Value="2" /> 
    <asp:ListItem Text="3" Value="3" /> 
    <asp:ListItem Text="4" Value="4" /> 
</asp:DropDownList> 

В коде:

protected void ddl_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    DropDownList ddl = (DropDownList)sender; 
    string value = ddl.SelectedValue; 

    SetValue(DropDownList1, value); 
    SetValue(DropDownList2, value); 
    SetValue(DropDownList3, value); 
} 

protected void SetValue(DropDownList ddl, string value) 
{ 
    ddl.SelectedIndex = ddl.Items.IndexOf(ddl.Items.FindByValue(value)); 
} 

Просто набрав ddl1.SelectedValue = ddl2.SelectedValue не будет работать, потому что DropDownList.SelectedValue только для чтения.

Обратите внимание, что я не просто установил SelectedIndex всех DDL-адресов для всех отправителей. Вы можете использовать в сценарии вашего примера, но если один из ваших DDL когда-либо имеет свои ListItems в другом порядке от других, код сломается. На мой взгляд, это делает его опасной практикой, но YMMV.

Кроме того, если вы решили обобщить метод SetValue (я часто добавляю его как метод расширения для элемента управления DropDownList по всему проекту), вы должны обрабатывать случаи, когда целевое значение не найдено в DDL, предположительно путем исключения исключения. Вы также можете сделать версию SetText, используя FindByText.

+0

Спасибо за помощь – chamara

1

Установите свойство selectedvalue на 2-й и 3-й кавычки вниз до выбранного значения в первом. Установите DropDown в autopostback = "true", чтобы он возвращался обратно на сервер, и вы можете установить его соответствующим образом.

ИЛИ, используйте клиентский JavaScript для изменения свойства selectedindex в других элементах выбора, когда событие клиента изменения запускается для первого.

0

Все, что вам нужно сделать, это установить SelectedIndex из ваших выпадающего списка, как это:

protected void DropDownList1SelectedIndexChanged(Object sender, EventArgs e) 
{ 
    dropDownList2.SelectedIndex = dropDownList1.SelectedIndex; 
    dropDownList3.SelectedIndex = dropDownList1.SelectedIndex; 
} 
+0

Забытые упоминания ... значения не в том же порядке во всех dropdowns.so, это не работает ... – chamara

0

Попробуйте следующее:

Markup:

<asp:DropDownList ID="dd1" OnSelectedIndexChanged="dd1_SelectedIndexChanged" AutoPostBack="true" runat="server" /> 
<asp:DropDownList ID="dd2" runat="server" /> 
<asp:DropDownList ID="dd3" runat="server" /> 

Code-за:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
     BindData(); 
} 

protected void dd1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    string selected = dd1.SelectedValue; 

    dd1.SelectedValue = dd2.SelectedValue = dd3.SelectedValue = selected; 

    BindData(); 
} 

private void BindData() 
{ 
    int[] values = { 1, 2, 3, 4 }; 

    dd1.DataSource = dd2.DataSource = dd3.DataSource = values; 

    dd1.DataBind(); 
    dd2.DataBind(); 
    dd3.DataBind(); 
} 
+0

Я верю, что 'dd1.SelectedValue = dd2.SelectedValue' вызовет ошибку, так как это свойство только для чтения , –

+1

@ Юстин: Нет, это не так. http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listcontrol.selectedvalue.aspx. Я тестировал свой код. – volpav

+0

Похоже, ты прав. Я мог бы поклясться, что это вызвало у меня проблемы в недавнем проекте, но, возможно, я думаю о чем-то другом. +1 к вашей ссылке, чтобы показать мне ошибку моих путей. –

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