2013-06-14 11 views
7

Mam dwie rozwijane listy z kilkoma pozycjami.Jak wyłączyć listę rozwijaną na podstawie wyboru użytkownika z innego menu rozwijanego ASP.NET?

Jeśli użytkownik wybierze X, X musi zostać wyłączony z następnego menu rozwijanego.

Jeśli użytkownik wybierze opcję Y, Y należy wyłączyć z następnego menu rozwijanego.

I odwrotnie.

próbowałem tego, ale to nie działa:

protected void ddlSearchColumn1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    var ddl = (DropDownList) sender; 

    string itemSelected = ddl.SelectedValue; 

    ddlSearchColumn2.Items.FindByValue(itemSelected).Enabled = false; 
} 

Czy ktoś może mi pomóc?

+0

użyciu javascript. –

+0

Zrobiłbym to z jQuery ..nie ma potrzeby wywołania odświeżenia dla czegoś takiego. –

+0

czy mógłbyś podać mi przykład? Jestem nowy w tworzeniu stron internetowych –

Odpowiedz

8

byłaś bardzo blisko:

znaczników:

List 1: <asp:DropDownList ID="ddlSearchColumn1" runat="server" OnSelectedIndexChanged="ddlSearchColumn1_SelectedIndexChanged" AutoPostBack="true" /> 
List 2: <asp:DropDownList ID="ddlSearchColumn2" runat="server" AutoPostBack="true" /> 

Code Behind:

public partial class _Default : Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!Page.IsPostBack) 
     {//JUST PUT SOMETHING IN THE DROPDOWN BOXES 
      var items1 = new List<ListItem>() 
      { 
       new ListItem("Select Option"), 
       new ListItem("Test 1"), 
       new ListItem("Test 2"), 
       new ListItem("Test 3") 
      }; 

      var items2 = new List<ListItem>() 
      { 
       new ListItem("Select Option", ""), 
       new ListItem("DDL 2 Test 1"), 
       new ListItem("DDL 2 Test 2"), 
       new ListItem("DDL 2 Test 3") 
      }; 

      ddlSearchColumn1.DataSource = items1; 
      ddlSearchColumn1.DataBind(); 

      ddlSearchColumn2.DataSource = items2; 
      ddlSearchColumn2.DataBind(); 
     } 
    } 

    protected void ddlSearchColumn1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     DropDownList list = sender as DropDownList; 
     if (list == null || list.SelectedValue.ToLower() != "test 1") // OR WHATEVER YOUR CRITERIA IS 
      return; 

     ddlSearchColumn2.Items.FindByValue("DDL 2 Test 1").Attributes.Add("Disabled", "Disabled"); 
    } 
} 

JEŚLI jesteś inte spoczął w roztworze po stronie klienta:

z jQuery:

List 1: <asp:DropDownList ID="ddlSearchColumn1" runat="server" /> 
List 2: <asp:DropDownList ID="ddlSearchColumn2" runat="server" /> 

<script> 
    jQuery('#<%= ddlSearchColumn1.ClientID %>').change(function() 
    { 
     if (jQuery(this).val() != 'Test 1')//CHANGE YOUR CRITERIA 
      return; 

     jQuery('#<%= ddlSearchColumn2.ClientID %> option[value="DDL 2 Test 1"]').attr('disabled', 'disabled'); 
    }); 
</script> 

tylko przy użyciu javascript nie Library:

List 1: <asp:DropDownList ID="ddlSearchColumn1" runat="server" /> 
List 2: <asp:DropDownList ID="ddlSearchColumn2" runat="server" /> 

<script> 
    document.getElementById('<%= ddlSearchColumn1.ClientID %>').onchange = function() 
    { 
     var orgDdl = document.getElementById('<%= ddlSearchColumn1.ClientID %>'); 
     var org2ddl = document.getElementById('<%= ddlSearchColumn2.ClientID %>'); 

     if (orgDdl.value != 'Test 1') 
      return; 

     for (var i = 0, ii = org2ddl.options.length; i < ii; i++) 
     { 
      if (org2ddl.options[i].value == "DDL 2 Test 1") 
      { 
       org2ddl.options[i].disabled = "disabled"; 
       break; 
      } 
     } 
    }; 
</script> 
0
protected void ddlFirst_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     foreach (ListItem item in ddlSecond.Items) 
     { 
      if (item.ToString() == ddlFirst.SelectedValue) 
      { 
       item.Attributes.Add("disabled", "disabled"); 
      } 
     } 
    } 
    protected void ddlSecond_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     foreach (ListItem item in ddlFirst.Items) 
     { 
      if (item.ToString() == ddlSecond.SelectedValue) 
      { 
       item.Attributes.Add("disabled", "disabled"); 
      } 
     } 
    } 

Ale nadal wierzę, to jest po stronie klienta rzeczą

+0

Na koniec uważam, że po stronie klienta w obu przypadkach po wyłączeniu czegokolwiek – brykneval

+0

Właściwie wiele kontroli można włączyć lub wyłączyć od strony serwera. Na przykład 'LinkButton.Enabled = False' doda atrybut' disabled' do wynikowego elementu 'a'. Nie wiedziałem, że możesz to zrobić dla elementów 'option'. – pseudocoder

0

dropdownlist zawiera zbiór obiektów listitem, które mają właściwość Enabled próbujesz ustawić. Ta właściwość działa dla ListItems w kontrolkach RadioButtonList lub CheckBoxList, ale NIE DropDownList.

MSDN odniesienia: http://msdn.microsoft.com/en-us/library/vstudio/system.web.ui.webcontrols.listitem.enabled(v=vs.100).aspx

"Uwaga: Nie można używać tej właściwości można wyłączyć kontrolę listitem w kontroli DropDownList lub ListBox kontroli"

Edycja: Odpowiedzi powyżej rozwiązać swój problem, jak opisany, a ja dowiedziałem się czegoś nowego :)

-1

Pomyślałem dodam tutaj.

Dwie rzeczy, zapomniałem dodać:

EnableViewState = "True" AutoPostBack = "True"

Jeśli nie dodać tych, do kontroli, zdarzenie nie jest zwolniony.

5

Z jakiegoś powodu, to pracował dla mnie:

if (ddlState.SelectedValue == "AK") 
    { 
     MyDdl.Items.FindByValue("1111111").Enabled = false; 

}

+0

To działa również dla mnie. Dzięki –

Powiązane problemy