一个同学写的Ajax三级联动的DEMO

效果如下:

一个同学写的Ajax三级联动的DEMO

后台代码:

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Text;

namespace AjaxDropDownList.WebUI
{
 /// <summary>
 ///
 /// </summary>
 public class _Default : System.Web.UI.Page
 {
  protected System.Web.UI.WebControls.DropDownList ddlDistrict;
  public static string DistrictSTR;
  public static string StateSTR;
  public static string CitySTR;

 
  private void Page_Load(object sender, System.EventArgs e)
  {
   
    // 在此处放置用户代码以初始化页面
   Ajax.Utility.RegisterTypeForAjax(typeof(_Default));
   if(!this.IsPostBack)
   {
    DistrictSTR=Server.MapPath("Addr_District.xml");
    StateSTR=Server.MapPath("Addr_State.xml");
    CitySTR=Server.MapPath("Addr_City.xml");

    initDistrict();
   }
  }

  //地区
  public void initDistrict()
  {
   DataSet ds=new DataSet();
   ds.ReadXml(DistrictSTR);
   this.ddlDistrict.DataSource=ds;
   this.ddlDistrict.DataTextField="DistrictName";
   this.ddlDistrict.DataValueField="DistrictCode";
   this.ddlDistrict.DataBind();

   this.ddlDistrict.Attributes.Add("onchange","StateResult()");

  }
  
  //省份
  [Ajax.AjaxMethod()]
  public string getState(string districtCode)
  {
   DropDownList ddlState=new DropDownList();
   DataSet ds=new DataSet();
   ds.ReadXml(StateSTR);
   ddlState.DataSource=ds.Tables[0].DefaultView;
   ds.Tables[0].DefaultView.RowFilter="StateCode like '"+districtCode+"%'";
   ddlState.DataTextField="StateName";
   ddlState.DataValueField="StateCode";
   ddlState.DataBind();
   ddlState.Width=120;

   ddlState.Attributes.Add("onchange","CityResult()");
   
   StringBuilder strb=new StringBuilder();
   StringWriter sw=new StringWriter(strb);
   HtmlTextWriter htw=new HtmlTextWriter(sw);

   ddlState.RenderControl(htw);
   return strb.ToString();   
  }
 
  //城市
  [Ajax.AjaxMethod()]
  public string getCity(string stateCode)
  {
   DropDownList ddlCity=new DropDownList();
   DataSet ds=new DataSet();
   ds.ReadXml(CitySTR);
   ddlCity.DataSource=ds.Tables[0].DefaultView;
   ds.Tables[0].DefaultView.RowFilter="CityCode like'"+stateCode+"%'";
   ddlCity.DataTextField="CityName";
   ddlCity.DataValueField="CityCode";
   ddlCity.DataBind();
   ddlCity.Width=120;

   StringBuilder strb=new StringBuilder();
   StringWriter sw=new StringWriter(strb);
   HtmlTextWriter htw=new HtmlTextWriter(sw);

   ddlCity.RenderControl(htw);
   return strb.ToString();
  }

  //DataGrid
  [Ajax.AjaxMethod()]
  public string getDataGrid(string stateCode)
  {
   DataGrid dg=new DataGrid();
   DataSet ds=new DataSet();
   ds.ReadXml(CitySTR);
   dg.DataSource=ds.Tables[0].DefaultView;
   ds.Tables[0].DefaultView.RowFilter="CityCode like '"+stateCode+"%'";
   dg.DataBind();
   dg.HeaderStyle.ForeColor=System.Drawing.Color.White;
   dg.HeaderStyle.Font.Bold=true;
   dg.HeaderStyle.BackColor=System.Drawing.Color.FromName("yellow");//highlight
   dg.HeaderStyle.Height=20;
   dg.CellPadding=3;

   StringBuilder strb=new StringBuilder();
   StringWriter sw=new StringWriter(strb);
   HtmlTextWriter htw=new HtmlTextWriter(sw);

   dg.RenderControl(htw);
   return strb.ToString();
  }

  #region Web 窗体设计器生成的代码
  override protected void OnInit(EventArgs e)
  {
   //
   // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
   //
   InitializeComponent();
   base.OnInit(e);
  }
  
  /// <summary>
  /// 设计器支持所需的方法 - 不要使用代码编辑器修改
  /// 此方法的内容。
  /// </summary>
  private void InitializeComponent()
  {   
   this.Load += new System.EventHandler(this.Page_Load);

  }
  #endregion
 }
}

前台代码:

<%@ Page language="c#" Codebehind="Default.aspx.cs" AutoEventWireup="false" Inherits="AjaxDropDownList.WebUI._Default" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >

<HTML>
 <HEAD>
  <title>Default</title>
  <meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
  <meta content="C#" name="CODE_LANGUAGE">
  <meta content="JavaScript" name="vs_defaultClientScript">
  <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
  <script language="javascript">
  <!--
  function StateResult()
  {
      var districtCode=document.getElementById("ddlDistrict").value;
      var State=document.getElementById("stateTD");
      State.innerHTML=_Default.getState(districtCode).value;    
       CityResult();
  }
  
  function CityResult()
  {
     var obj=document.getElementById("stateTD");
     var stateCode=obj.getElementsByTagName("select")[0].value;  
     var City=document.getElementById("cityTD");
     City.innerHTML=_Default.getCity(stateCode).value;
    
         
     var dataGrid=document.getElementById("ucTD");
     dataGrid.innerHTML=_Default.getDataGrid(stateCode).value;
  }    
  
  -->
  </script>
  <style type="text/css">
  TD { FONT-SIZE: 13px }
  </style>
 </HEAD>
 <body onload="StateResult()">
  <form id="Form1" method="post" runat="server">
   <TABLE id="Table1" cellSpacing="0" cellPadding="2" width="500" border="0">
    <TR>
     <TD style="WIDTH: 120px; HEIGHT: 20px">
      <P align="right">地区</P>
     </TD>
     <TD style="HEIGHT: 20px">
      <asp:dropdownlist id="ddlDistrict" runat="server" Width="120px"></asp:dropdownlist></TD>
    </TR>
    <TR>
     <TD style="WIDTH: 120px; HEIGHT: 25px">
      <P align="right">省份</P>
     </TD>
     <TD id="stateTD" style="HEIGHT: 25px"><FONT face="宋体"></FONT></TD>
    </TR>
    <TR>
     <TD style="WIDTH: 120px; HEIGHT: 26px">
      <P align="right">城市</P>
     </TD>
     <TD id="cityTD" style="HEIGHT: 26px"><FONT face="宋体"></FONT></TD>
    </TR>
    <TR>
     <TD style="WIDTH: 120px"></TD>
     <TD id="ucTD"><FONT face="宋体"></FONT></TD>
    </TR>
   </TABLE>
  </form>
 </body>
</HTML>

这里是读取XML数据的,想自己试一下的朋友,请这里下载XML 放到同级文件夹里即可!

你可能感兴趣的:(Ajax)