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