2012-04-05 23 views
2

私のASP.NETフォルダには、3つの異なるSQLdatascourcesを持つカテゴリの種類が入っている3つのドロップダウンボックスがあります。各ドロップダウンリストは、その上にあるドロップダウンリストに依存します。
このことの目的は、dropdownlist1で何かを選択すると、dropdownlist2のデータソースが変更されることです。したがって、dropdown2のデータはdropdown1の選択された値に依存します。 dropdown3のデータは、dropdown2で選択した値に依存します。
初めての方は素敵です。しかし、dd1の値を選択した後、dd2の値を選択すると、失敗に終わります。
たとえば、dropdown1で値を2回変更すると、他のドロップダウンリストは変更されません。この種のものを行うに回答SQLdatasourceを使用したドロップダウンリスト階層

答えて

4

を事前に

Thxを、あなたはあなたのトップレベルに一度だけ読み込まれるドロップダウンリストで、そうでページのロード中にそれを置く!IsPostBackプロパティ、その周りを確認する必要があります。 次に、そのトップレベルのドロップダウンリストにOnSelectedIndexChanged()イベントをアタッチし、その中で2番目のレベルのドロップダウンリストの項目をクリアしてから、新しいデータソースを設定してください。

次に、2番目のレベルのドロップダウンリストでOnSelectedIndexChanged()を実行し、3番目のドロップダウンリストをクリアしてから入力してください。

その後、3番目のイベントは必要ありません。

+0

THXのM8 それはすでに は今別の問題 私が何か秒の時間を再選択するとき、それは前の項目に新しいアイテムが追加されますが、ただそこにある^^束を助けました。 ドロップダウンリストを完全にクリアする方法はありますか?(ここでは、 "make choice here"というテキストの値が0の最初の項目を除く) – finxie

+0

クール、私はこのシナリオを何度も繰り返してきましたが、最初の数回は厄介なことを覚えています –

+0

ddlMyDropDownList.Items.Clear()、ddlMyDropDownList.Items.Add(New ListItem –

0

dd1OnSelectedIndexChangeddd2を埋めるためにコードを入れて、(dd3を埋めるために)dd2OnSelectedIndexChangedために同じことを行います。

0

キーで接続された2つの異なるテーブル(この例では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(); 
     } 
    } 
} 
関連する問題