2

在我的 ASP.NET 文件夹中,我有 3 个下拉框,其中填充了具有 3 个不同 SQLdatasources 的各种类别。每个下拉列表都取决于它上面的那个。
这个东西的用意是,在 dropdownlist1 中选择了某个东西后,dropdownlist2 中的数据源发生了变化。所以 dropdown2 中的数据取决于 dropdown1 中的选定值。而 dropdown3 中的数据取决于 dropdown2 中的选定值。
第一次,这一切都很好,花花公子。但是当我在 dd1 中选择一个值,然后在 dd2 中选择一个值时,它开始失败。
例如,当我在 dropdown1 中第二次更改该值时,其他下拉列表不会改变。

提前谢谢回复

4

3 回答 3

4

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

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

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

于 2012-04-05T08:03:36.217 回答
0

将代码填写dd2OnSelectedIndexChangedof 中,对 ofdd1执行相同OnSelectedIndexChanged的操作dd2(以填写dd3)。

于 2012-04-05T08:07:33.080 回答
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();
        }
    }
}
于 2012-04-05T08:27:35.817 回答