使用SQLdatasource的Dropdownlist-hierarchy

时间:2012-04-05 07:55:40

标签: c# asp.net sqldatasource

在我的ASP.NET文件夹中,我有3个下拉框,其中包含3种不同的SQLdatascources类别。每个下拉列表都取决于它上面的那个 这个东西的意图是在dropdownlist1中选择一些东西后,dropdownlist2中的数据源会发生变化。因此,dropdown2中的数据取决于dropdown1中的选定值。 dropdown3中的数据取决于dropdown2中的选定值 这一切都很好,第一次花花公子。但是当我在dd1中选择一个值并在此之后选择dd2中的值时,它开始失败 例如,当我在dropdown1中第二次更改值时,其他下拉列表不会改变。

提前回复

3 个答案:

答案 0 :(得分:4)

要做这种事情,你需要确保你的顶级下拉列表只填充一次,所以把它放在页面加载中,周围有一个!isPostback。 然后在该顶级下拉列表中附加OnSelectedIndexChanged()事件,并在其中,确保在设置新数据源之前清除第二级下拉列表中的项目。

然后在第二级下拉列表中使用OnSelectedIndexChanged(),并确保在填充之前清除第三个。

然后第三个不需要任何事件。

答案 1 :(得分:0)

将代码填入dd2的{​​{1}} OnSelectedIndexChanged,并对dd1的{​​{1}}执行相同的操作(填写{{1} }})。

答案 2 :(得分: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();
        }
    }
}