如何实现级联DropDownList ASP.Net控件?

时间:2014-01-10 19:00:41

标签: c# asp.net

我有两个DropDownList控件的代码,一个影响另一个控件中的元素。代码是:

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解决方案?

3 个答案:

答案 0 :(得分:4)

这是使用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将该数据绑定到第二个下拉列表。

答案 1 :(得分:0)

我不确定你将它应用于标记代码是什么意思,现在代码的样子你应该在表单上有两个下拉列表(在源视图中),当你选择第一个时( drop_date)它应该回发并致电drop_date_SelectedIndexChanged()(假设autopostback上的drop_date属性设置为true)。

这样做的一个更简单的方法是考虑以下之一:

  • 考虑使用类似Ajax Toolkit的Cascading Drop Downs控件。有一个完整的演练,可以将它与数据库here集成。

  • 如果您想保留上述代码,另一种选择就是使用Update Panel

答案 2 :(得分:0)

您可以阅读“使用两个DropDownLists进行主/细节过滤”教程(C#)

检查该链接:http://www.asp.net/web-forms/tutorials/data-access/masterdetail/master-detail-filtering-with-two-dropdownlists-cs

相关问题