2014-01-10 40 views
1

我有兩個DropDownList控件的代碼,一個影響另一箇中的元素。該代碼是:如何實現級聯DropDownList ASP.Net控件?

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     FillDropDownList(); 
    } 
} 

我已經設置爲AutoPostBack="True"通訊DropDownList

private void FillDropDownList() 
    { 
     DataSet ds = new DataSet(); 
     SqlDataAdapter myda = new SqlDataAdapter("Select newsletter FROM Tablename", connection Object); 
     myda.Fill(ds); 
     drop_date.DataSource = ds; 
     drop_date.DataValueField = "date"; 
     drop_date.DataBind(); 
     drop_date.Items.Insert(0, new ListItem("Select", "0")); 
    } 

    protected void drop_date_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     DataSet ds = new DataSet(); 
     SqlDataAdapter myda = new SqlDataAdapter("Select newsletter FROM tablename where date='"+drop_date.SelectedValue+"'",connection_Object); 
     myda.Fill(ds); 
     drop_newsletter.DataSource = ds; 
     drop_newsletter.DataValueField = "newsletter"; 
     drop_newsletter.DataBind(); 
     drop_newsletter.Items.Insert(0, new ListItem("Select", "0")); 
    } 

我認爲這段代碼是正確的,但我不知道如何將這個應用在使用asp.net和html的標記代碼中。我如何加入?還是有一個更容易的JavaScript解決方案?

+0

你是說你從什麼地方該代碼隱藏文件,但你沒有標記去配合它?如果是這樣,那是你要求的(有人寫這個代碼的標記)? – jadarnel27

+0

你的問題很不清楚。 – Amir

回答

1

這是你將如何使用asp.net創建下拉列表:

<asp:updatepanel runat="server" id="UpdatePanel" UpdateMode="Conditional"> 
    <contenttemplate> 
     <asp:dropdownlist runat="server" id="drop_date" OnSelectedIndexChanged="drop_date_SelectedIndexChanged" AutoPostBack="true"> 
     </asp:dropdownlist> 
     <asp:dropdownlist runat="server" id="drop_newsletter"> 
     </asp:dropdownlist> 
    </contenttemplate> 
</asp:updatepanel> 

然後在您的.cs代碼:

protected void drop_date_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    DataSet ds = new DataSet(); 
    SqlDataAdapter myda = new SqlDataAdapter("Select newsletter FROM tablename where date='"+drop_date.SelectedValue+"'",connection_Object); 
    myda.Fill(ds); 
    drop_newsletter.DataSource = ds; 
    drop_newsletter.DataValueField = "newsletter"; 
    drop_newsletter.DataBind(); 
    drop_newsletter.Items.Insert(0, new ListItem("Select", "0")); 
    //This updates the panel Asynchronously 
    UpdatePanel.Update(); 
} 

如果你是使用JavaScript: 你會需要創建一個web服務,以便您可以使用ajax調用來獲取數據。然後你會使用javascript將數據綁定到第二個下拉列表。

+0

謝謝這麼多! – user3183094

+0

沒問題。你可以標記我的答案是正確的 –

0

我不知道你的意思是將它應用到標記代碼,你的代碼看起來應該有兩個下拉列表(在源代碼視圖中),當你選擇第一個(drop_date)它應回發並致電drop_date_SelectedIndexChanged()(前提條件是autopostback屬性在drop_date上設置爲true)。

這樣做是考慮下列之一的巧妙方式:

  • 考慮使用類似的AJAX工具包的Cascading Drop Downs控制。有一個完整的演練將它與數據庫here集成。

  • 如果您想保留上述代碼,另一種選擇是使用Update Panel

相關問題