2012-04-05 111 views
2

在我的ASP.NET文件夾中,我有3個dropdownbox用3種不同的SQLdatascources填充各種類別。每個下拉列表取決於它上面的那個。
這件事的意圖是,在dropdownlist1中選擇了某些內容後,dropdownlist2中的數據源發生了變化。因此,dropdown2中的數據取決於dropdown1中的選定值。下拉菜單3中的數據取決於下拉菜單2中的選定值。
這一切都很好,第一次漂亮。但是當我在dd1中選擇一個值並在dd2之後選擇一個值時,它開始失敗。
例如,當我在dropdown1中第二次更改該值時,其他下拉列表不會更改。與SQLdatasource Dropdownlist層次結構

THX提前回復

回答

4

做這種事情,你需要確保你的頂級下拉列表中只填入一次,所以把它放在網頁負載與周圍!的IsPostBack。 然後在此之上的水平下拉列表附加OnSelectedIndexChanged()事件,並在其中,請務必設置它的新的數據源之前清除在第二級下拉列表中的項目。

然後,OnSelectedIndexChanged()的第二級下拉列表,並確保填充它之前清除第三。

然後第三個不需要任何事件。

+0

THX M8 它已經幫助了一堆^^ 現在僅僅是另一個問題 當我重新選擇的東西第二次,它增加了新的項目之前的項目。 有沒有辦法徹底清除下拉列表(除了具有文本值0的第一個項目「做出選擇在這裏」)? – finxie 2012-04-05 08:19:47

+0

酷,我已經做了情景這麼多次,但我記得它是棘手的最初幾次 – 2012-04-05 08:23:25

+0

我清除了ddlMyDropDownList.Items.Clear(整個下拉列表),然後ddlMyDropDownList.Items.Add(新建列表項(「0」,「做出選擇」)) – 2012-04-05 08:27:07

0

把代碼中的dd1OnSelectedIndexChanged填寫dd2,並且做同樣的dd2OnSelectedIndexChanged(填寫dd3)。

0

帶有由鍵連接的兩個不同表的代碼示例: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(); 
     } 
    } 
}