ASP.NET ajax 省市区三级联动 无法将数据绑定到DropDownList.不知道是不是绑定数据出错了
            ///<summary>
     ///三级联动,绑定省
    ///</summary>
    public void mat()
    {
        string txtcmd1 = "Server=(local);database=OnlineVoteDB;uid=sa;pwd=pt-luyong;";
        SqlConnection myconn = new SqlConnection(txtcmd1);
        myconn.Open();
        string sql_sheng = "select name from province";
        SqlCommand cmd = new SqlCommand(sql_sheng, myconn);
        SqlDataReader dr = cmd.ExecuteReader();
        
        while (dr.Read())
        {
            Sheng.Items.Add(dr["name"].ToString());        }
        dr.Close();
        myconn.Close();    }
    /// <summary>
    /// 省选定,加载市
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    public void rix()
    {   
        string txtcmd1 = "Server=(local);database=OnlineVoteDB;uid=sa;pwd=pt-luyong;";
        SqlConnection myconn = new SqlConnection(txtcmd1);
        myconn.Open();
        string sql_shi = "select city.code,city.name from city,province where province.code = city.provinceID and province.name = '" + Sheng.SelectedItem.Text + "'";
        SqlCommand cmd = new SqlCommand(sql_shi, myconn);
        SqlDataReader dr = cmd.ExecuteReader();
        while (dr.Read())
        {
            Shi.Items.Add(dr["name"].ToString());
        }
        myconn.Close();
        dr.Close();
    }    /// <summary>
    /// 市选定,加载区
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    public void key()
    {   
        string txtcmd1 = "Server=(local);database=OnlineVoteDB;uid=sa;pwd=pt-luyong;";
        SqlConnection myconn = new SqlConnection(txtcmd1);
        myconn.Open();
        string sql_qu = "select area.name from area,city where city.code = area.cityid and city.name = '" + Shi.SelectedItem.Text + "'";
        SqlCommand cmd = new SqlCommand(sql_qu, myconn);
        SqlDataReader dr = cmd.ExecuteReader();
        while (dr.Read())
        {
            Qu.Items.Add(dr["name"].ToString());
        }
        myconn.Close();
        dr.Close();
    }
    //在加载页面时,从数据库中下载省列表到"省"下拉控件
    protected void Pade_load(object sender, EventArgs e)
    {
        if(!IsPostBack)
        {
            mat();
        }
    }    //在选定"省"之后,从数据库载入市列表到"市"下拉控件
    protected void Sheng_SelectedIndexChanged(object sender, EventArgs e)
    {
        string txtcmd1 = "Server=(local);database=OnlineVoteDB;uid=sa;pwd=pt-luyong;";
        SqlConnection myconn = new SqlConnection(txtcmd1);
        Shi.Items.Clear();
        myconn.Open();
        rix();
        myconn.Close();
    }
    //在选定市之后,从数据库载入区列表到"区"下拉控件
    protected void Shi_SelectedIndexChanged(object sender, EventArgs e)
    {
        string txtcmd1 = "Server=(local);database=OnlineVoteDB;uid=sa;pwd=pt-luyong;";
        SqlConnection myconn = new SqlConnection(txtcmd1);
        Qu.Items.Clear();
        myconn.Open();
        key();
        myconn.Close();
        
    }

解决方案 »

  1.   

    第一点:每一个方法用到string txtcmd1 = "Server=(local);database=OnlineVoteDB;uid=sa;pwd=pt-luyong;";这句话,建议定义成全局变量。
    第二点:绑定DropDownList的时候需要
       while (dr.Read())
      {
         Shi.Items.Add(dr["name"].ToString());
         Shi.SelectedIndex = "";
         Shi.SelectedValue = "";
         Shi.DataBind();
      }
      

  2.   


            public static DataTable FindByLoginId(string AdminId)
            {
                DataTable dt = DBHelp.GetInfo("select * from SendEmail where AdminId='" + AdminId + "' order by id desc");
                return dt;
            }        DataTable dt = SendEmailManager.FindByLoginId((Session["Admin"] as Admin).LoginId);
                            DropDownList1.DataSource = dt.DefaultView;                       DropDownList1.DataBind();
      

  3.   


                            <asp:DropDownList ID="DropDownList1" runat="server" Width="150px" 
                                DataTextField="RealName" DataValueField="LoginId">
                            </asp:DropDownList>
      

  4.   


    我用的是DropDownList.Items.Add方法来绑定数据的啊.不是动态绑定
      

  5.   

    之间做过一个:
    1,先将省啊市啊县啊之类的数据以json的格式放在一个文件里面。
    2,利用Jquery读取这个文件进行填充。
    3,下拉框联动选择的时候,用jquery动态获取数据填充即可。
      

  6.   

    <select id="sheng" style="width: 121px" runat="server" onchange="changsheng(this.value)" name="sheng">
                   <option value="0">
    --请选择省--
    </option>
                  </select>
    <!--城市列表  等到ajax查询出该省份的所有城市,用填充到城市列表中-->
    <select id="city" runat="server" onchange="changshi(this.value)" name="city" >
          <option  value="0">
                --请选择市--
              </option>
    </select>

         <!--区的列表 -->
    <select id="qu" runat="server" name="qu">
    <option value="0">
    --请选择区--
            </option>
    </select>
    当触发onchange事件时,会自动把下一个select中option的value加载出来.可是对应的问题也出来了.我无法获取它的真实value,每次都是默认的value="0",如此一来,获取的市也是默认的:"--请选择市--".请问有什么解决办法吗?以下是ajax:function changsheng(va)
    {
                           
    if(va!='0')
    {
    var city = document.getElementById("city");
    city.disabled=false;
    var qu = document.getElementById("qu");
    qu.disabled=true;
                    
    var f=document.getElementById("qu");
    f.options.length=1;
    var url="Handler.ashx?type=sheng&id="+va;
      send_request("GET",url,null,"text",populateClass3);
    }
    }
    function populateClass3(){
     var f=document.getElementById("city");
    if(http_request.readyState==4){
    if(http_request.status==200){
     var list=http_request.responseText;
     var classList=list.split("|");
     f.options.length=1;
     for(var i=0;i<classList.length;i++){
     var tmp = classList[i].split(",");
    //alert(tmp[1] + "===" + tmp[0]);此处用alert测试,选择第一个下拉框时,会直接将该省的所有市的value加载出来.
     f.add(new Option(tmp[1],tmp[0]));
     }
     }else{
    alert("您所请求的页面有异常。");
      }
     }
    }
    function changshi(va)
    {
    if(va!='0')
    {
    var qu = document.getElementById("qu");
            qu.disabled=false;
        
    var url="Handler.ashx?type=shi&id="+va;
       send_request("GET",url,null,"text",populateClass4);
        
     }
    }
    function populateClass4(){
    var f=document.getElementById("qu");
    if(http_request.readyState==4){
    if(http_request.status==200){
    var list=http_request.responseText;
    var classList=list.split("|");
    f.options.length=1;
    for(var i=0;i<classList.length;i++){
    var tmp = classList[i].split(",");
    alert(tmp[1] + "==" + tmp[0]);//此处用alert测试,选择第一个下拉框时,会直接将该市的所有地区的value加载出来.
    f.add(new Option(tmp[1],tmp[0]));
     }
    }else{
    alert("您所请求的页面有异常。");
      }
     }
            }