2013-06-14 5 views
7

Ich habe zwei Dropdown-Listen mit einer Handvoll Artikel.Wie deaktiviere ich ein Dropdown-Listenelement basierend auf einer Benutzerauswahl in einem anderen Dropdown in ASP.NET?

Wenn der Benutzer X auswählt, muss X vom nächsten Dropdown deaktiviert werden.

Wenn der Benutzer Y auswählt, muss Y vom nächsten Dropdown deaktiviert werden.

Und umgekehrt.

habe ich versucht, diese aber es funktioniert nicht:

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

    string itemSelected = ddl.SelectedValue; 

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

Kann jemand mir eine Hand geben?

+0

Javascript verwenden. –

+0

Ich würde dies mit jQuery tun ..Es muss kein Postback für so etwas verursacht werden. –

+0

Können Sie mir ein Beispiel geben? ich bin neu in Web-Entwicklung –

Antwort

8

Sie ganz in der Nähe waren:

Auszeichnungs:

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"); 
    } 
} 

Wenn Sie inte sind in einer Client-Side-Lösung ruhte:

Mit 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> 

Nur Javascript keine Bibliothek mit:

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"); 
      } 
     } 
    } 

Aber ich glaube immer noch, diese Client-Seite, was ist

+0

Ich glaube am Ende seine Client-Seite in beiden Fällen, wenn Sie irgendetwas deaktivieren – brykneval

+0

Tatsächlich eine Menge von Kontrollen können Sie aktivieren oder deaktivieren Sie von der Server-Seite. Zum Beispiel fügt 'LinkButton.Enabled = False' das' disabled' Attribut zum resultierenden 'a' Element hinzu. Ich wusste nicht, dass du das für "Option" -Elemente tun könntest. – pseudocoder

0

Die Dropdownlist enthält eine Sammlung von ListItem-Objekte, die die Eigenschaft haben, aktiviert die Sie einstellen wollen. Diese Eigenschaft funktioniert für ListItems in RadioButtonList- oder CheckBoxList-Steuerelementen, jedoch nicht in DropDownList.

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

"Hinweis: Sie können diese Eigenschaft nicht verwenden, um eine ListItem Steuerung in einem Steuerelement Dropdownlist oder ListBox-Steuerelement zu deaktivieren"

Edit: Antworten über Ihr Problem lösen, wie Sie beschrieben, und ich lernte etwas Neues :)

-1

Ich dachte, ich hier hinzufügen würde.

Zwei Dinge, die wir hinzufügen vergessen:

EnableViewState = „True“ Autopostback = „True“

Wenn Sie diejenigen, an die Steuerung nicht hinzufügen, wird das Ereignis nicht ausgelöst.

5

Aus irgendeinem Grund, dies für mich gearbeitet:

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

}

+0

Es funktioniert auch für mich. Danke –

Verwandte Themen