2012-04-05 14 views
2

In meinem ASP.NET-Ordner habe ich 3 Dropdown-Boxen, die mit Arten von Kategorien mit 3 verschiedenen SQLdatascources gefüllt sind. Jede Dropdown-Liste hängt von der darüber liegenden Dropdown-Liste ab.
Die Absicht dieser Sache ist, dass nach dem Auswählen von etwas in Dropdown-Liste1, die Datenquelle in Dropdown-Liste2 ändert. Die Daten in Dropdown2 hängen also vom ausgewählten Wert in Dropdown1 ab. Die Daten in Dropdown3 hängen vom ausgewählten Wert in Dropdown2 ab.
Alles funktioniert nett und dandy ein erstes Mal. Aber wenn ich einen Wert in dd1 und danach einen Wert in dd2 gewählt habe, fängt es an zu scheitern.
Wenn ich den Wert ein zweites Mal zum Beispiel in Dropdown1 ändere, ändern sich die anderen Dropdownlisten nicht.Dropdown-Liste-Hierarchie mit SQLdatasource

Thx im Voraus für die Antworten

Antwort

4

diese Art der Sache zu tun, müssen Sie sicher, dass Ihre Top-Level-Drop-Down-Liste machen nur einmal ausgefüllt ist, so setzt sie in dem Laden der Seite mit ein! IsPostBack um ihn herum. Fügen Sie dann ein OnSelectedIndexChanged() - Ereignis auf dieser Dropdown-Liste auf oberster Ebene an, und löschen Sie die Elemente in der Dropdown-Liste der zweiten Ebene, bevor Sie die neue Datenquelle festlegen.

Dann ein OnSelectedIndexChanged() auf der zweiten Ebene Dropdown-Liste, und sicher sein, die dritte vor dem Auffüllen zu löschen.

Dann braucht die dritte keine Ereignisse.

+0

thx m8 es half schon ein paar ^^ jetzt gibt es nur ein weiteres Problem , wenn ich etwas ein zweites Mal erneut auswählen, fügt es die die neuen Elemente zu den vorherigen Artikeln. Gibt es eine Möglichkeit, die Dropdown-Liste vollständig zu löschen (außer für das erste Element mit dem Wert 0 mit dem Text "Auswahl treffen")? – finxie

+0

Cool, ich habe dieses Szenario so oft gemacht, aber ich erinnere mich, dass es die ersten paar Male schwierig war –

+0

Ich würde die gesamte Dropdown-Liste mit einem ddlMyDropDownList.Items.Clear(), dann ddlMyDropDownList.Items.Add (New ListItem ("0", "Make a Choice")) –

0

den Code Put dd2 im OnSelectedIndexChanged von dd1 zu füllen, und das gleiche für die OnSelectedIndexChanged von dd2 (dd3 zu füllen).

0

Codebeispiel mit 2 verschiedenen Tabellen, die mit Schlüsseln verbunden sind, in diesem Beispiel companyID.

public partial class Default : Page 
{ 
    public void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      var datacontext = new DataClasses1DataContext(); 
      List<Company> companies = datacontext.Companies.ToList(); 
      DropDownList1.DataSource = companies; 
      DropDownList1.DataValueField = "CompanyID"; 
      DropDownList1.DataTextField = "CompanyName"; 
      DropDownList1.DataBind(); 
     } 
    } 

    public void DropDownList1SelectedIndexChanged(object sender, EventArgs e) 
    { 
     using (var dc = new DataClasses1DataContext()) 
     { 
      DetailsView2.DataSource = null; 
      DetailsView2.DataBind(); 

      DetailsView1.DataSource = dc.Companies.Where(d => d.CompanyID.Equals(DropDownList1.SelectedValue)).ToList(); 
      DetailsView1.DataBind(); 

      List<Contact> contacts = 
      dc.Contacts.Where(d => d.CompanyID.Equals(DropDownList1.SelectedValue)).ToList();    
      DropDownList2.DataSource = contacts; 
      DropDownList2.DataTextField = "LastName"; 
      DropDownList2.DataValueField = "ContactID"; 
      DropDownList2.DataBind(); 

      if (contacts.Any()) 
      { 
       DetailsView2.DataSource = dc.Contacts.Where(c => c.ContactID.Equals(DropDownList2.SelectedValue)).ToList(); 
       DetailsView2.DataBind(); 
      } 

     } 
    } 

    public void DropDownList2SelectedIndexChanged(object sender, EventArgs e) 
    { 
     using (var dc = new DataClasses1DataContext()) 
     { 
      DetailsView2.DataSource = dc.Contacts.Where(c => c.ContactID.Equals(DropDownList2.SelectedValue)).ToList(); 
      DetailsView2.DataBind(); 
     } 
    } 
} 
Verwandte Themen