CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  ASP.NET

关于两个列表框级联的问题

楼主china91chen(杰杰)2004-12-02 09:43:41 在 .NET技术 / ASP.NET 提问

如题,要一个无刷新的,能够取到两个dropdownlist的值和selectedindex的,谢谢  
  问题点数:100、回复次数:3Top

1 楼jxzhang615(冰河)回复于 2004-12-02 09:45:56 得分 0

帮顶!Top

2 楼goody9807(http://goody9807.cnblogs.com)回复于 2004-12-02 09:58:55 得分 50

cuike519的作品          
   
    ASP.NET给我们带了了事件模型的编程机制,这使得我们将所有的任务都放在服务器上执行哪怕是一个小小变动,其实这到不是什么问题,可是有一点我们无法忍受,如果我们改变某一个输入框中的内容页面要刷新,改变DropDownlist的选择项需要更新另一个Dropdownlist需要刷新,真是郁闷。  
                下面我将描述一种原始的方法,之所以说它原是是因为这种方法在ASP.NET之前就已经有了,我想这两者之间的关系我不必详细描述,我们今天要说的是如何不刷新页面更新DropDownList,该方法旨在抛砖引玉,其实使用该方法可以实现许多不刷新网页就和后台交互的应用,好了废话就不说了,看看我们的例子吧,首先我们需要一个放置两个DropDownList的页面,假如它叫WebForm2.aspx,页面的代码如下:  
  <%@   Page   language="c#"   Codebehind="WebForm2.aspx.cs"   AutoEventWireup="false"   Inherits="WebApptest1.WebForm2"   %>  
  <!DOCTYPE   HTML   PUBLIC   "-//W3C//DTD   HTML   4.0   Transitional//EN"   >  
  <HTML>  
    <HEAD>  
      <title>WebForm2</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>  
              function   load(state){  
                var   drp2   =   document.getElementById("DropDownList2");  
                for(var   i   =   0;i<=drp2.options.length   -1;i++){  
          drp2.remove(i);  
                }  
                                                          var   oHttpReq   =   new   ActiveXObject("MSXML2.XMLHTTP");  
                var   oDoc   =   new   ActiveXObject("MSXML2.DOMDocument");  
                oHttpReq.open("POST",   "webform6.aspx?state="+state,   false);  
                oHttpReq.send("");  
                result   =   oHttpReq.responseText;  
                oDoc.loadXML(result);  
                items   =   oDoc.selectNodes("//CITY/Table");  
                for   (var   item   =   items.nextNode();   item;   item   =   items.nextNode()){  
          var   city   =   item.selectSingleNode("//city").nodeTypedValue;  
          var   newOption   =   document.createElement("OPTION");  
          newOption.text   =   city;  
          newOption.value   =   city;  
          drp2.options.add(newOption);  
                }  
              }  
      </script>  
    </HEAD>  
    <body   MS_POSITIONING="flowLayout">  
      <form   id="Form1"   method="post"   runat="server">  
        <asp:DropDownList   id="DropDownList1"   runat="server"></asp:DropDownList>  
        <asp:DropDownList   id="DropDownList2"   runat="server"></asp:DropDownList>  
      </form>  
    </body>  
  </HTML>  
   
                  上面的页面中有两个DropDownList和一段js脚本,该脚本可以直接写在页面也可以写在后台在Regeist到页面上(后者更灵活一些)该页的后台代码如下所示,在Page_Load里面写如下的代码:  
    if(!this.IsPostBack){  
      SqlConnection   con   =   new   SqlConnection("server=localhost;database=pubs;uid=sa;pwd=sa;");  
      SqlDataAdapter   da   =   new   SqlDataAdapter("select   state   from   authors   group   by   state",con);  
      DataSet   ds   =   new   DataSet();  
      this.DropDownList1.DataTextField   =   "State";  
      this.DropDownList1.DataValueField   =   "State";  
      this.DropDownList1.DataBind();  
      this.DropDownList1.Attributes.Add("onchange","load(this.options[this.selectedIndex].innerText)");  
    }  
                在上面的代码中我们做了两件事情:1、帮定其中一个DropDownList(你也可以同时绑定两个)。2、指定该控件的客户端脚本。下面我们详细介绍一下上面的js代码,首先得到页面上要联动的DorpDownList对象,将他的Options清空,再创建两个客户端对象oHttpReq和oDoc对象,其中一个负责发送请求另一个负责得到响应结果,我们将用户选择的State发送到名为WebForm6.aspx的页面,该页面将处理这个请求并返回一个响应,该响应的结果是一个XML文件,稍候介绍WebForm6.aspx里面的代码。我们将返回的结果使用loadXML方法Load到oDoc对象里面,然后就可以使用selectNodes方法得到所有的city节点,接着循环这些节点在客户端创建Option对象,最后将这些Option对象Add到DropDwonList2里面去。  
                  下面我们看看WebFowm6.aspx都做了些什么事情,该页面的HTML页面是一个除了包括<@Page>指令意外什么都没有的页面,后台的Page_Load代码如下:  
    private   void   Page_Load(object   sender,   System.EventArgs   e){  
      //   Put   user   code   to   initialize   the   page   here  
      if(this.Request["state"]!=null){  
      string   state   =   this.Request["state"].ToString();  
      SqlConnection   con   =   new   SqlConnection("server=localhost;database=pubs;uid=sa;pwd=sa;");  
      SqlDataAdapter   da   =   new   SqlDataAdapter("select   city   from   authors   where   state   =   '"+state+"'",con);  
      DataSet   ds   =   new   DataSet("CITY");  
      da.Fill(ds);  
      XmlTextWriter   writer   =   new   XmlTextWriter(Response.OutputStream,   Response.ContentEncoding);  
      writer.Formatting   =   Formatting.Indented;  
      writer.Indentation   =   4;  
      writer.IndentChar   =   '   ';  
      ds.WriteXml(writer);  
      writer.Flush();  
      Response.End();  
      writer.Close();  
    }  
                    该方法得到用户选择的state通过查询以后得到一个DataSet对象,使用该对象的WriteXML方法直接将内容写到Response.OutputStream里面然后传递到客户端,客户端的load方法通过result   =oHttpReq.responseText;句话得到一个XML字符串,最后解析此串。  
   
  Top

3 楼loverdotnet(西瓜)回复于 2004-12-02 10:01:38 得分 50

function   filluser()  
  {      
        var   GetID   =   "<%=UserIDs%>";  
        var   GetName   =   "<%=UserNames%>";  
        var   IDs   =   GetID.split(",");  
        var   Names   =   GetName.split(",");  
     
        for(var   i=0;i<IDs.length;i++)  
        {  
              var   Ooption   =   document.createElement("OPTION");  
              Ooption.value=IDs[i];  
              Ooption.text=Names[i];  
              document.all("sel1").add(Ooption);  
        }  
        var   GetFirID   =   "<%=FirUserIDs%>";  
        if(GetFirID!="")  
        {  
              var   FirIDs   =   GetFirID.split(",");  
              for(var   i=0;i<FirIDs.length;i++)  
              {  
                    for(var   j=0;j<document.all("sel1").length;j++)  
                    {  
                          if(FirIDs[i]==document.all("sel1").options[j].value)  
                          {  
                                      var   addValue   =   document.all("sel1").options[j].value;  
      var   addText   =   document.all("sel1").options[j].text;  
      document.all("sel1").remove(j);  
    //firstN0--;  
      var   Ooption   =   document.createElement("OPTION");  
      Ooption.value=addValue;  
      Ooption.text=addText;  
      document.all("sel2").add(Ooption);  
                          }  
                    }  
              }  
        }  
   
  }  
   
   
   
  选择数据到第二个list框中去  
  function   adduser()  
  {  
         
        var   firstN0   =   document.all("sel1").length;  
        for(var   i=0;i<firstN0;i++)  
        {  
                var   selNo   =   document.all("sel1").selectedIndex;  
                if(selNo!=-1)  
                {  
                    var   addValue   =   document.all("sel1").options[selNo].value;  
                    var   addText   =   document.all("sel1").options[selNo].text;  
                    document.all("sel1").remove(selNo);  
                    //firstN0--;  
                    var   Ooption   =   document.createElement("OPTION");  
                    Ooption.value=addValue;  
                    Ooption.text=addText;  
                    document.all("sel2").add(Ooption);  
                }  
        }  
           
       
   
  }  
   
   
  Top

相关问题

  • 实现三级联动下拉列表框,求高人帮忙!!!!
  • 一个级联的问题,文本框对下拉列表的,非常着急!!!!
  • 级联下拉列表怎么做呀???
  • select列表框关联,类似:列表框1选择省份,列表框2内容为该省城市
  • 列表框
  • 列表框
  • 请大家帮帮我2级级联下拉列表问题!!
  • 关于下拉列表框的问题——菜鸟级
  • 列表框如何实现折叠多级显示?
  • 年月日三级下拉列表框如何重复运用?

关键词

  • asp.net

得分解答快速导航

  • 帖主:china91chen
  • goody9807
  • loverdotnet

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo