zoukankan      html  css  js  c++  java
  • Ajax无刷新技术实现省市县三级联动下拉菜单Asp.Net

    不废话,先上效果图。

    开始工作。

    第一步:准备好数据,中国省市县行政区域编码做好三张表,分别是province表,sity表,area表,上截图:,这三张表,主要有code,和name两个字段,code用来存储区域编码,name用来存储行政区域名字,当然了还有个Id主键,自增长,我们利用code来判断依赖关系。

    第二步:数据库和表做好之后呢,就可以写代码了,先拖一个ScriptManager控件和一个UpdatePanel控件,这两个控件是用来实现无刷新技术的,非常方便。接着拖3个DropDownList控件,一定要注意,要放在UpdatePanel控件的ContentTemplate里面,看看代码:

    <form id="form1" runat="server">
            <asp:ScriptManager ID="ScriptManager1" runat="server">
            </asp:ScriptManager>
            <asp:UpdatePanel ID="UpdatePanel1" runat="server">
                <ContentTemplate>
                    <asp:DropDownList ID="ddl_Province" runat="server" AutoPostBack="True" onselectedindexchanged="ddl_Province_SelectedIndexChanged">
                    </asp:DropDownList>
                    <asp:DropDownList ID="ddl_City" runat="server" AutoPostBack="True" onselectedindexchanged="ddl_City_SelectedIndexChanged">
                    </asp:DropDownList>
                    <asp:DropDownList ID="ddl_Area" runat="server">
                    </asp:DropDownList>
                </ContentTemplate>
            </asp:UpdatePanel>
        </form>
    

     写到这儿,就写有关数据库相关的代码就好了,非常简单的。

    第三步:后台代码:

    在后台代码里,我写了三个方法,BindProvince(),BindCity(),BindArea(),这三个方法如其名所说是用来绑定省市县的三个下拉菜单的,方法很简单,看代码:

            private void BindProvince()
            {
                string sql = "select code,name from province";
                SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["conn"].ConnectionString);
                SqlDataAdapter adapter = new SqlDataAdapter(sql,conn);
                DataSet ds = new DataSet();
                conn.Open();
                adapter.Fill(ds);
                conn.Close();
                ddl_Province.DataSource = ds.Tables[0];
                ddl_Province.DataValueField = "code";
                ddl_Province.DataTextField = "name";
                ddl_Province.DataBind();
            }
            private void BindCity(string code)
            {
                string provinceCode = code.Substring(0, 2);
                string sql = "select code,name from city where left(code,2)='"+ provinceCode +"'";
                SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["conn"].ConnectionString);
                SqlDataAdapter adapter = new SqlDataAdapter(sql, conn);
                DataSet ds = new DataSet();
                conn.Open();
                adapter.Fill(ds);
                conn.Close();
                ddl_City.DataSource = ds.Tables[0];
                ddl_City.DataValueField = "code";
                ddl_City.DataTextField = "name";
                ddl_City.DataBind();
            }
    
            private void BindArea(string code)
            {
                string cityCode = code.Substring(0, 4);
                string sql = "select code,name from area where left(code,4)='" + cityCode + "'";
                SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["conn"].ConnectionString);
                SqlDataAdapter adapter = new SqlDataAdapter(sql, conn);
                DataSet ds = new DataSet();
                conn.Open();
                adapter.Fill(ds);
                conn.Close();
                ddl_Area.DataSource = ds.Tables[0];
                ddl_Area.DataValueField = "code";
                ddl_Area.DataTextField = "name";
                ddl_Area.DataBind();
            }

    接着就是在下拉菜单的SelectedIndexChanged事件处理方法上写上这几个方法了,代码如下:

    protected void ddl_City_SelectedIndexChanged(object sender, EventArgs e)
            {
                BindArea(ddl_City.SelectedItem.Value);
            }
    
            protected void ddl_Province_SelectedIndexChanged(object sender, EventArgs e)
            {
                BindCity(ddl_Province.SelectedItem.Value);
                BindArea(ddl_City.SelectedItem.Value);
            }

    最后就是在页面的Load事件里写:

     protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                {
                    BindProvince();
                    BindCity(ddl_Province.SelectedItem.Value);
                    BindArea(ddl_City.SelectedItem.Value);
                }
            }

    最后莫要忘了把省份下拉菜单和市级别的下拉菜单设置为AutoPostBack=True;OK....整个后台代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Data;
    using System.Data.SqlClient;
    using System.Configuration;
    namespace ChinaArea
    {
        public partial class Default : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                {
                    BindProvince();
                    BindCity(ddl_Province.SelectedItem.Value);
                    BindArea(ddl_City.SelectedItem.Value);
                }
            }
    
            private void BindProvince()
            {
                string sql = "select code,name from province";
                SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["conn"].ConnectionString);
                SqlDataAdapter adapter = new SqlDataAdapter(sql,conn);
                DataSet ds = new DataSet();
                conn.Open();
                adapter.Fill(ds);
                conn.Close();
                ddl_Province.DataSource = ds.Tables[0];
                ddl_Province.DataValueField = "code";
                ddl_Province.DataTextField = "name";
                ddl_Province.DataBind();
            }
            private void BindCity(string code)
            {
                string provinceCode = code.Substring(0, 2);
                string sql = "select code,name from city where left(code,2)='"+ provinceCode +"'";
                SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["conn"].ConnectionString);
                SqlDataAdapter adapter = new SqlDataAdapter(sql, conn);
                DataSet ds = new DataSet();
                conn.Open();
                adapter.Fill(ds);
                conn.Close();
                ddl_City.DataSource = ds.Tables[0];
                ddl_City.DataValueField = "code";
                ddl_City.DataTextField = "name";
                ddl_City.DataBind();
            }
    
            private void BindArea(string code)
            {
                string cityCode = code.Substring(0, 4);
                string sql = "select code,name from area where left(code,4)='" + cityCode + "'";
                SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["conn"].ConnectionString);
                SqlDataAdapter adapter = new SqlDataAdapter(sql, conn);
                DataSet ds = new DataSet();
                conn.Open();
                adapter.Fill(ds);
                conn.Close();
                ddl_Area.DataSource = ds.Tables[0];
                ddl_Area.DataValueField = "code";
                ddl_Area.DataTextField = "name";
                ddl_Area.DataBind();
            }
    
            protected void ddl_City_SelectedIndexChanged(object sender, EventArgs e)
            {
                BindArea(ddl_City.SelectedItem.Value);
            }
    
            protected void ddl_Province_SelectedIndexChanged(object sender, EventArgs e)
            {
                BindCity(ddl_Province.SelectedItem.Value);
                BindArea(ddl_City.SelectedItem.Value);
            }
        }
    }

    设计代码:

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="ChinaArea.Default" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
            <asp:ScriptManager ID="ScriptManager1" runat="server">
            </asp:ScriptManager>
            <asp:UpdatePanel ID="UpdatePanel1" runat="server">
                <ContentTemplate>
                    <asp:DropDownList ID="ddl_Province" runat="server" AutoPostBack="True" onselectedindexchanged="ddl_Province_SelectedIndexChanged">
                    </asp:DropDownList>
                    <asp:DropDownList ID="ddl_City" runat="server" AutoPostBack="True" onselectedindexchanged="ddl_City_SelectedIndexChanged">
                    </asp:DropDownList>
                    <asp:DropDownList ID="ddl_Area" runat="server">
                    </asp:DropDownList>
                </ContentTemplate>
            </asp:UpdatePanel>
        </form>
    </body>
    </html>
  • 相关阅读:
    数据库第1,2,3范式学习
    node.js安装及小例子
    WorkSkill整理之 技能体系
    PTE 准备之 Read aloud
    PTE 准备之 Personal introduction
    PTE准备的时候,用英式英语还是美式英语
    sqlserver2014无法打开报Cannot find one or more components_修复方案
    beego 框架用的页面样式模板
    Go语言开发中MongoDB数据库
    xmind8 破解激活教程
  • 原文地址:https://www.cnblogs.com/RookieBen/p/2989838.html
Copyright © 2011-2022 走看看