当前位置:编程学习 > C#/ASP.NET >>

dropdownlist 二级联动 第二级不能保存数据,

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" EnableEventValidation="false"  Inherits="_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><%= pagetitle %></title>
 <script language="javascript">
// XmlHttp是什么? 
//最通用的定义为:XmlHttp是一套可以在Javascript、VbScript、Jscript等脚本语言中通过http协议传送或从接收XML及其他数据的一套API。XmlHttp最大的用处是可以更新网页的部分内容而不需要刷新整个页面。 
//来自MSDN的解释:XmlHttp提供客户端同http服务器通讯的协议。客户端可以通过XmlHttp对象(MSXML2.XMLHTTP.3.0)向http服务器发送请求并使用微软XML文档对象模型Microsoft® XML Document Object Model (DOM)处理回应。
         //jb函数会根据不同的浏览器初始化个xmlhttp对象
        function jb()
        {
            var A=null; 
            try 
            { 
                A=new ActiveXObject("Msxml2.XMLHTTP"); 
            } 
            catch(e)
            { 
                  try 
                   { 
                      A=new ActiveXObject("Microsoft.XMLHTTP"); 
                   }
                  catch(oc)
                   { 
                     A=null 
                   } 
            } 
           if ( !A && typeof XMLHttpRequest != "undefined" ) 
           { 
               A=new XMLHttpRequest() 
            } 
           return A 
         }
         
         //下面Go函数是父列表框改变的时候调用,参数是选择的条目
         function Go(obj)
        {
            //得到选择框的下拉列表的value
           var svalue = obj.value;
            //定义要处理数据的页面
            var weburl = "Default.aspx?parent_id="+svalue;
            //初始化个xmlhttp对象
            var xmlhttp = jb();
            //提交数据,第一个参数最好为get,第三个参数最好为true(表示异步,false表示同步)
            xmlhttp.open("get",weburl,true);
           // alert(xmlhttp.responseText);
            //如果已经成功的返回了数据
            xmlhttp.onreadystatechange=function()
            {
              if(xmlhttp.readyState==4)//4代表成功返回数据
               {
                  var result = xmlhttp.responseText;//得到服务器返回的数据
                  //先清空ddlC的所有下拉项
                 document.getElementById("ddlC").length = 0;
                  //给ddlC加个全部型号的,注意是Option不是option
                  document.getElementById("ddlC").options.add(new Option("请选择","0"));
                  if(result!="")//如果返回的数据不是空
                  {
                     //把收到的字符串按照,分割成数组
                     var allArray = result.split(",");
                    //循环这个数组,注意是从1开始,因为收到的字符串第一个字符是,号,所以分割后第一个数组为空
                     for(var i=1;i<allArray.length;i++)
                     {
                        //在把这个字符串按照|分割成数组
                       var thisArray = allArray[i].split("|");
                        //为ddlC添加条目
                       document.getElementById("ddlC").options.add(new Option(thisArray[1].toString(),thisArray[0].toString()));
                     }
                  }
               }
            }
            //发送数据,请注意顺序和参数,参数一定为null或者""
            xmlhttp.send(null);
         }
        </script>
        
    </HEAD>
    <body>
        <form id="Form1" method="post" runat="server">
            <TABLE id="Table1" style="Z-INDEX: 101; LEFT: 8px; WIDTH: 656px; POSITION: absolute; TOP: 8px; HEIGHT: 620px"
                cellSpacing="1" cellPadding="1" border="0">
                <TR>
                    <TD style="WIDTH: 71px; HEIGHT: 17px"><FONT face="宋体">所在地</FONT></TD>
                    <TD style="HEIGHT: 17px">
                    <asp:dropdownlist id="ddlS" runat="server" onchange="Go(this)"></asp:dropdownlist>
                    <asp:dropdownlist id="ddlC" runat="server"></asp:dropdownlist></TD>
                    <TD style="HEIGHT: 17px"><FONT face="宋体"></FONT></TD>
                </TR>
                
                <TR>
                    <TD align="center" colSpan="3"><FONT face="宋体">
                    <asp:button id="btnOk" runat="server" Text="确定并提交" Width="152px" OnClick="btnOk_Click"></asp:button></FONT></TD>
                </TR>
                <tr>
                <td>
                    <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
                </td>
                </tr>
            </TABLE>
             
        </form>
    </body>
</HTML>




using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;


public partial class _Default : System.Web.UI.Page 
{
    private SqlConnection con;
    private SqlDataAdapter da;
    private DataSet ds;
    protected string pagetitle;     //网页标题 

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            con=new SqlConnection("server=.;database=NewsData;uid=sa;pwd=123");
            da = new SqlDataAdapter("select * from Area1", con);
            ds = new DataSet();
            da.Fill(ds, "area");
            ds.Tables["area"].DefaultView.Sort = "ClassID ASC";
            ddlS.DataSource = ds.Tables["area"].DefaultView;
            ddlS.DataValueField = "ClassID";
            ddlS.DataTextField = "ClassName";
            ddlS.DataBind();
        }
        BindDrop();

        pagetitle = Label1.Text; 
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        Response.Write(ddlS.SelectedItem.Text);
        Response.Write(ddlC.SelectedItem.Text);
    }

    protected void BindDrop()
    {
        //ddlS.Attributes.Add("onchange", "Go(this)");
        string str = Request.QueryString["parent_id"];
        string str1 = ddlS.SelectedValue;
        Response.Write(str1);
        //如果str加个字符串!=原来的字符串则说明触发过ddlS的onchange事件
        if ((str + "abc") != "abc")
        {
            //绑定 ddlC控件
            BindChild(str);//把传来的父DropDownList的value做为参数
        }
        else
            BindParent(str1);
    }


    protected void BindParent(string str)
    {
        //如果是第一次请求或者是刷新这个页面则根据ddlS的值来选择
        //把参数转化成int
        int i = Convert.ToInt32(str);
        ddlC.Items.Clear();
        ddlC.Items.Add(new ListItem("请选择", "0"));
        //得到数据库连接字符串
        string connStr = "server=.;database=NewsData;uid=sa;pwd=123";
        //初始化个conn对象
        SqlConnection conn = new SqlConnection(connStr);
        //数据库语句
        string commStr = string.Format("select ClassID,ClassName from Area where ClassID={0}", i);
        //建立数据库命令对象
        SqlCommand comm = new SqlCommand(commStr, conn);
        //打开数据库
        conn.Open();
        //执行命令
        SqlDataReader dr = comm.ExecuteReader();
        //循环dr,给ddlS添加条目
        while (dr.Read())
        {
            ddlC.Items.Add(new ListItem(dr[1].ToString(), dr[0].ToString()));
            //也可以这样
            //ddlS.Items.Add(new ListItem(dr["phone_text"].ToString(),dr["phone_value"].ToString()));
        }
        ddlC.ClearSelection();
        ddlS.Items[0].Selected = false;
        //添加下面这话的意思是当点提交按钮提交窗体的时候第二个ddlC的状态能够得到保存
        ddlC.SelectedValue = Request.Form["ddlC"];
        dr.Close();
        conn.Close();
    }


    protected void BindChild(string str)
    {
        //通过js给包括dropdownlist任何控件添加的内容不会被保存状态
        //把参数转化成int
        int i = Convert.ToInt32(str);

        string result = "";

        Response.Clear();
        string connStr = "server=.;database=NewsData;uid=sa;pwd=123";
        SqlConnection conn = new SqlConnection(connStr);
        SqlCommand comm = conn.CreateCommand();
        string commStr = string.Format("select ClassName,ClassID from Area where ClassID={0}", i);
        comm.CommandText = commStr;
        conn.Open();
        SqlDataReader dr = comm.ExecuteReader();
        while (dr.Read())
        {
            result += "," + dr[1].ToString() + "|" + dr[0].ToString();
        }
        Response.Write(result);
        Response.Flush();
        Response.Close();
        dr.Close();
        conn.Close();
    }
    protected void btnOk_Click(object sender, EventArgs e)
    {
        //Response.Write(ddlS.SelectedItem.Text);
        //Response.Write(ddlC.SelectedItem.Text);
        Label1.Text = ddlS.SelectedItem.Text + "<br>" + ddlC.SelectedItem.Text;
    }
}



dropdownlist 二级联动 第二级不能保存数据,

数据读取成功后,无论选择哪个,都只获取数据库里的第一条信息! 这个代码哪儿有问题
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,