none
动态添加DropDownList控件时选择值时的问题???? RRS feed

  • 问题

  • 假如我动态添加了五个DropDownList控件,我想要在第一个DropDownList选择了一个值后,在以后的DropDownList中都不要出现前面已经选择过的值,该怎么做呢?????
    学习,学习,再学习..........
    2010年5月4日 4:28

答案

  • 两种办法:

    第一种需要刷新页面:

    设置DropDownList的autopostback=true,实现DropDownList的SelectedIndexChanged事件,然后在事件里重新加载所有的DropDownList并把以选中的值去掉。

    第二种方法是用js来删除

    设置DropDownList的Attributes.Add("onchange", "要执行的function");然后在function里删除其他DropDownList的值。

    2010年5月4日 5:58
  • 你好,

    杨琦 已经给你指出了实现你的需求的两种方式了。

    1.服务器端删除

    分别从各自对应的数据源中删除然后再绑定。这样要钱有几个dropdownlist就得有几个数据源。

    2.直接前端删除

    利用脚本结合控件的onchange事件,把已经出现的item给删掉就可以了。个人推荐这种方式。

    关于怎么操作可以参考下面的例子。

    http://www.plus2net.com/javascript_tutorial/list-remove.php

    http://blog.csdn.net/sytWeibo/archive/2009/07/30/4395094.aspx


    Microsoft Online Community Support
    2010年5月6日 3:33
  • 你好,使用UpdatePanel中使用方法访问其他DropDownList的Items,删除你需要删除的Item就可以了。
    邹俊才
    2010年5月9日 17:04
    版主

全部回复

  • 在第一个DropDownList选中后动态修改其他DropDownList的内容
    2010年5月4日 5:04
  • ??????/
    学习,学习,再学习..........
    2010年5月4日 5:41
  • 两种办法:

    第一种需要刷新页面:

    设置DropDownList的autopostback=true,实现DropDownList的SelectedIndexChanged事件,然后在事件里重新加载所有的DropDownList并把以选中的值去掉。

    第二种方法是用js来删除

    设置DropDownList的Attributes.Add("onchange", "要执行的function");然后在function里删除其他DropDownList的值。

    2010年5月4日 5:58
  •   private void GetoperUser()
      {
        Panel2.Controls.Clear();
        for (int i = 0; i < 5; i++)
        {
          ddl.ID = "ddl" + i.ToString();
          ddl.Items.Clear();
          ddl.Items.Add("请选择人员");
          ddl.Items.Add("小王");
          ddl.Items.Add("小李");
          ddl.Items.Add("小周");
          ddl.Items.Add("小田");
          ddl.AutoPostBack = true;
          ddl.SelectedIndexChanged += new EventHandler(dselect);
          this.Panel2.Controls.Add(ddl);
        }
      }
    
     protected void dselect(object sender, EventArgs e)
      {
    
      //这里面怎么写呀????
    
      }
    

    学习,学习,再学习..........
    2010年5月4日 6:04
  • ?????
    学习,学习,再学习..........
    2010年5月4日 7:09
  • 呵呵。。。。
    学习,学习,再学习..........
    2010年5月4日 7:42
  • ????????、
    学习,学习,再学习..........
    2010年5月4日 9:40
  • 我是这样修改滴。。。。

     

        

      /// <summary>
        /// 存放的DropList对象数组
        /// </summary>
        DropDownList[] ddlist;
        protected void Panel1_Init(object sender, EventArgs e)
        {
          ddlist = new DropDownList[5]; 
          Panel1.Controls.Clear();
          for (int i = 0; i < 5; i++)
          {
    
            DropDownList ddl = new DropDownList();
            ddl.ID = "ddl" + i.ToString();
    
            ddlist[i] = ddl;   //放进数组
            LS.Add(ddl.ID);
            ddl.Items.Clear();
            ddl.Items.Add("请选择人员");
            ddl.Items.Add("小王");
            ddl.Items.Add("小李");
            ddl.Items.Add("小周");
            ddl.Items.Add("小田");
            ddl.AutoPostBack = true;
            ddl.SelectedIndexChanged += new EventHandler(DropDownList1_SelectedIndexChanged);
            this.Panel1.Controls.Add(ddl);
          }
        }
    
     
    
        /// <summary>
        /// 存放DropList的ID,用来区别
        /// </summary>
        List<string> LS = new List<string>();
        protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
        {
          DropDownList ddl = sender as DropDownList;
          ListItem LItem = ddl.SelectedItem;  //需要操作的项
          if (LItem.Selected)
          {
            string lsItem1 = LS.Find(delegate(string t) { return t.Equals(ddl.ID); }); //获取正在操作项的DropList的ID
            string lsItem2 = lsItem1.Substring(3);  //取出ID的编号ddl2=>2
            int selectNum = int.Parse(lsItem2)+1;
            if (selectNum < LS.Count)
            {
              for (int i = selectNum; i < ddlist.Length; i++)  //选择项只修改后面的DropList的值,不修改前面的DropList
              {
                ddlist[i].Items.Remove(LItem);
              }
            }
          }
        }
    
    

     

    • 已编辑 墨水荒 2010年5月4日 15:09 修改为C#代码块模式
    2010年5月4日 15:07
  • 要在第一个DropDownList选择了一个值后,在以后的DropDownList中都不要出现前面已经选择过的值?

    不是很明白什么意思。

    代码都是可以进行访问到每一个ListItem的,并且都可以删除的啊


    【孟子E章】
    2010年5月5日 1:37
    版主
  • 呵呵,就是说假如每个DropDownList 都是相同的值,但是我每在一个DropDownList 中选中一个值,在其他的DropDownList 中就不会出现前面已经选中过的值了。

     private void GetoperUser()
      {
        Panel2.Controls.Clear();
        for (int i = 0; i < 5; i++)
        {

          DropDownList ddl = new DropDownList();
          ddl.ID = "ddl" + i.ToString();
          ddl.Items.Clear();
          ddl.Items.Add("请选择人员");
          ddl.Items.Add("小王");
          ddl.Items.Add("小李");
          ddl.Items.Add("小周");
          ddl.Items.Add("小田");
          ddl.AutoPostBack = true;
          ddl.SelectedIndexChanged += new EventHandler(dselect);
          this.Panel2.Controls.Add(ddl);
        }
      }

    protected void dselect(object sender, EventArgs e)
      {

      //这里面怎么写呀????

      }


    学习,学习,再学习..........
    2010年5月5日 9:36
  • ????????
    学习,学习,再学习..........
    2010年5月6日 2:22
  • 你好,

    杨琦 已经给你指出了实现你的需求的两种方式了。

    1.服务器端删除

    分别从各自对应的数据源中删除然后再绑定。这样要钱有几个dropdownlist就得有几个数据源。

    2.直接前端删除

    利用脚本结合控件的onchange事件,把已经出现的item给删掉就可以了。个人推荐这种方式。

    关于怎么操作可以参考下面的例子。

    http://www.plus2net.com/javascript_tutorial/list-remove.php

    http://blog.csdn.net/sytWeibo/archive/2009/07/30/4395094.aspx


    Microsoft Online Community Support
    2010年5月6日 3:33
  • 你好,使用UpdatePanel中使用方法访问其他DropDownList的Items,删除你需要删除的Item就可以了。
    邹俊才
    2010年5月9日 17:04
    版主