以前也接触过三级联动,不过那个时候都是照搬照抄比人的,自己感觉不太好弄,也没动手做过。现在做这个项目由于需要这样一个东东,就自己动手做了一个
感觉还可以。
在aspx页面中加入这段代码:
<asp:DropDownList runat="server" ID="DDLSearch" OnSelectedIndexChanged="DDLSearch_SelectedIndexChanged" AutoPostBack="true">
<asp:ListItem Text="区域搜索" Value="0"></asp:ListItem>
<asp:ListItem Text="职位搜索" Value="1"></asp:ListItem>
</asp:DropDownList>
<asp:Panel runat="server" ID="pArea"> //从这里的两个panel是要根据 上面的搜过内容交替显示的
<asp:DropDownList ID="DDLAreaState" runat="server" AutoPostBack="True" OnSelectedIndexChanged="DDLAreaState_SelectedIndexChanged" >
</asp:DropDownList>
<asp:DropDownList ID="DDLAreaCity" runat="server" AutoPostBack="True" OnSelectedIndexChanged="DDLAreaCity_SelectedIndexChanged">
</asp:DropDownList>
<asp:DropDownList ID="DDLAreaXq" runat="server">
</asp:DropDownList>
</asp:Panel>
<asp:Panel runat="server" ID="pPosition">
<asp:DropDownList runat="server" ID="ddlPosFir" AutoPostBack="True" OnSelectedIndexChanged="ddlPosFir_SelectedIndexChanged"></asp:DropDownList>
<asp:DropDownList runat="server" ID="ddlPosSec"></asp:DropDownList>
</asp:Panel>
在aspx.cs页面中 加入这段代码
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
pArea.Visible = true;
pPosition.Visible = false;
ddlAreaDataBind();
ddlPosDataBind();
DDLAreaCity.Items.Add(itemAdd("选择一个市或辖区"));//初始化的时候初始化默认项
DDLAreaXq.Items.Add(itemAdd("选择一个县或辖区"));//初始化的时候初始化默认项
ddlPosSec.Items.Add(itemAdd("选择一个职位"));//初始化的时候初始化默认项
}
}
/// <summary>
/// 数据库链接
/// </summary>
/// <param name="strSQL"></param>
/// <returns></returns>
protected DataSet sqlConnection(string strSQL)
{
string strConn = System.Configuration.ConfigurationManager.ConnectionStrings["conn"].ToString();
SqlConnection conn = new SqlConnection(strConn);
conn.Open();
SqlDataAdapter dr = new SqlDataAdapter(strSQL, conn);
DataSet ds = new DataSet();
dr.Fill(ds, "table");
conn.Close();
conn.Dispose();
return ds;
}
#region //区域搜索相关数据
protected void DDLSearch_SelectedIndexChanged(object sender, EventArgs e)
{
if (DDLSearch.SelectedItem.Value == "0")
{
pArea.Visible = true;
pPosition.Visible = false;
ddlAreaDataBind();
DDLAreaCity.Items.Clear();
DDLAreaXq.Items.Clear();
DDLAreaCity.Items.Add(itemAdd("请选择一个市或辖区"));//添加一个默认项
DDLAreaXq.Items.Add(itemAdd("请选择一个县或辖区"));//同上
}
else
{
pArea.Visible = false;
pPosition.Visible = true;
ddlPosFir.Items.Clear();
ddlPosSec.Items.Clear();
ddlPosDataBind();
ddlPosSec.Items.Add(itemAdd("选择一个职位"));
}
}
/// <summary>
/// ddlareastate数据绑定
/// </summary>
protected void ddlAreaDataBind()
{
string strSQL = "";//这个是初始化时的sql语句
DataSet ds = sqlConnection(strSQL);
DDLAreaState.DataSource = ds.Tables[0].DefaultView;
DDLAreaState.DataTextField = "area_state";
DDLAreaState.DataValueField = "area_bh";
DDLAreaState.DataBind();
DDLAreaState.SelectedIndex = DDLAreaState.Items.IndexOf(DDLAreaState.Items.FindByValue("41"));//添加默认选项
DDLAreaState.Items.Insert(0,new ListItem("选择一个省或直辖市","0"));
}
/// <summary>
/// 为下拉菜单添加固定项
/// </summary>
/// <param name="strText"></param>
/// <returns></returns>
protected ListItem itemAdd(string strText)//动态添加DDL项
{
ListItem li = new ListItem();
li.Text = strText;
li.Value = "0";
return li;
}
protected void DDLAreaState_SelectedIndexChanged(object sender, EventArgs e)
{
DDLAreaCity.Items.Clear();
DDLAreaXq.Items.Clear();
if (DDLAreaState.SelectedItem.Value == "0")
{
ddlAreaDataBind();
DDLAreaCity.Items.Add(itemAdd("选择一个市或辖区"));
DDLAreaXq.Items.Add(itemAdd("选择一个县或辖区"));
}
else
{
string strSQL = "";//SQL语句
DataSet ds = sqlConnection(strSQL);
DDLAreaCity.DataSource = ds.Tables[0].DefaultView;
DDLAreaCity.DataTextField = "area_city";
DDLAreaCity.DataValueField = "area_bh";
DDLAreaCity.DataBind();
DDLAreaCity.Items.Insert(0, new ListItem("请选择一个市或辖区", "0"));
DDLAreaXq.Items.Add(itemAdd("请选择一个县或辖区"));
}
}
protected void DDLAreaCity_SelectedIndexChanged(object sender, EventArgs e)
{
DDLAreaXq.Items.Clear();
if (DDLAreaCity.SelectedItem.Value == "0")
{
DDLAreaXq.Items.Add(itemAdd("请选择一个县或辖区"));
}
else
{
string strSQL = "";
DataSet ds = sqlConnection(strSQL);
DDLAreaXq.DataSource = ds.Tables[0].DefaultView;
DDLAreaXq.DataTextField = "area_xq";
DDLAreaXq.DataValueField = "area_bh";
DDLAreaXq.DataBind();
DDLAreaXq.Items.Insert(0, new ListItem("请选择一个县或辖区", "0"));
}
}
/// <summary>
/// 职位搜索DDL数据绑定
/// </summary>
protected void ddlPosDataBind()
{
string strSQL = "";//SQL语句
DataSet ds = sqlConnection(strSQL);
ddlPosFir.DataSource = ds.Tables[0].DefaultView;
ddlPosFir.DataTextField = "position_mc";
ddlPosFir.DataValueField = "position_bh";
ddlPosFir.DataBind();
ddlPosFir.SelectedIndex = ddlPosFir.Items.IndexOf(ddlPosFir.Items.FindByValue("02"));//添加默认选项
ddlPosFir.Items.Insert(0,new ListItem("选择一个类别","0"));
}
protected void ddlPosFir_SelectedIndexChanged(object sender, EventArgs e)
{
ddlPosSec.Items.Clear();
if (ddlPosFir.SelectedItem.Value == "0")
{
ddlPosSec.Items.Add(itemAdd("选择一个职位"));
}
else
{
string strSQL = "";
DataSet ds = sqlConnection(strSQL);
ddlPosSec.DataSource = ds.Tables[0].DefaultView;
ddlPosSec.DataTextField = "position_mc";
ddlPosSec.DataValueField = "position_bh";
ddlPosSec.DataBind();
ddlPosSec.Items.Insert(0,new ListItem("选择一个职位","0"));
}
}
由于是初次写这个代码比较多 ,有点乱,待以后慢慢改进。这个只是测试用的所以数据绑定的部分都没有写公用函数。