HTML:
C#:<asp:DataList ID="dlSubject" runat="server">
<ItemTemplate>
专业 <asp:DropDownList ID="ddlMajor" runat="server" DataSource="<% BindMajor()%>" DataTextField="MajorName" DataValueField="MajorId" AutoPostBack="true" OnSelectedIndexChanged="ddlMajor_SelectedIndexChanged" >
</asp:DropDownList>
方向 <asp:DropDownList ID="ddlDirection" runat="server" DataTextField="DirectionName" DataValueField="DirectionId">
</asp:DropDownList>
</ItemTemplate>
</asp:DataList>
<ItemTemplate>
专业 <asp:DropDownList ID="ddlMajor" runat="server" DataSource="<% BindMajor()%>" DataTextField="MajorName" DataValueField="MajorId" AutoPostBack="true" OnSelectedIndexChanged="ddlMajor_SelectedIndexChanged" >
</asp:DropDownList>
方向 <asp:DropDownList ID="ddlDirection" runat="server" DataTextField="DirectionName" DataValueField="DirectionId">
</asp:DropDownList>
</ItemTemplate>
</asp:DataList>
public DataSet bindMajor()
{
return new MajorBLL().SelectTheMajorByDeptID(Session["DeptID"].ToString()); //根据院系编号获取该院系的所有专业
}
//专业和专业下的方向都是放置在模板的DropDownList控件中,将DataList控件切换到模板状态下,双击专业的DropDownList控件,使其产生SelectedIndexChanged事件,在其HTML代码中已经看到。
protected void ddlMajor_SelectedIndexChanged(object sender, EventArgs e)
{
DropDownList ddlMajor = (DropDownList)sender; //最重要的一句
DropDownList ddlDirection = (DropDownList)ddlMajor.Parent.FindControl("ddlDirection");
ddlDirection.DataSource = bindDirection(ddlMajor.SelectedValue);
//ddlDirection.DataTextField = "DirectionName"; //已经在HTML中设置过,就不需要再设置了
//ddlDirection.DataValueField = "DirectionId";
ddlDirection.DataBind();
}
{
return new MajorBLL().SelectTheMajorByDeptID(Session["DeptID"].ToString()); //根据院系编号获取该院系的所有专业
}
//专业和专业下的方向都是放置在模板的DropDownList控件中,将DataList控件切换到模板状态下,双击专业的DropDownList控件,使其产生SelectedIndexChanged事件,在其HTML代码中已经看到。
protected void ddlMajor_SelectedIndexChanged(object sender, EventArgs e)
{
DropDownList ddlMajor = (DropDownList)sender; //最重要的一句
DropDownList ddlDirection = (DropDownList)ddlMajor.Parent.FindControl("ddlDirection");
ddlDirection.DataSource = bindDirection(ddlMajor.SelectedValue);
//ddlDirection.DataTextField = "DirectionName"; //已经在HTML中设置过,就不需要再设置了
//ddlDirection.DataValueField = "DirectionId";
ddlDirection.DataBind();
}
public DataSet bindDirection(string p_strMajor)
{
return new DirectionBLL().selectDirectionByMajor(p_strMajor); //根据专业编号获取属于该专业的所有方向
}
本人认为用前一篇文章中提到过的给DataLIST控件中的某控件添加事件处理程序的方法也能实现DropDownList的级联,不过没有试验。 {
return new DirectionBLL().selectDirectionByMajor(p_strMajor); //根据专业编号获取属于该专业的所有方向
}
要在DataList控件的ItemDataBound事件中实现两个DropDownList的数据绑定初始化。
GridView控件中的级联也是类似的。GridView控件时在RowDataBound事件中实现两个DropDownList的数据绑定初始化。