网上有人说加一句dropDownList1.ClearSelection()清除选择项就可以解决,可是在我这里就无效,不知道怎么解决。
我通过一个函数设置DDL的选择项,还望高手指点,因要使用Ajax,所以我的DDL都是放在updatePanel中的:
private void SetDDLItem(DropDownList ddlSetting, string strValue, bool bValue)
    {
        for(int i=0;i<ddlSetting.Items.Count;i++)
        {
            if(bValue)
            {
                if (ddlSetting.Items[i].Value == strValue)
                {
                    ddlSetting.ClearSelection();
                    ddlSetting.SelectedIndex = i;
                    return;
                }
            }
            else
            {
                if(ddlSetting.Items[i].Text==strValue)
                {
                    ddlSetting.ClearSelection();
                    ddlSetting.SelectedIndex = i;
                    return;
                }
            }
        }
    }

解决方案 »

  1.   

    断点检查是正常的,不存在设置多个选择项的问题,逐句跟踪所有语句都不会报错,只是执行完毕所有语句后跳出错误项,网上说这是DropDownList的bug,但按照其他人给出的解决办法加入ClearSelection()也无法解决,不知问题出在哪里。
      

  2.   

    本来就不能多选,所以说是个bug嘛
      

  3.   

    应该是放到updatePanel上的问题
      

  4.   

    dropDownList1.ClearSelection();  
    dropDownList1.Items.FindByText(xstyle).Selected   =   true;   
      

  5.   

    ddlSetting.ClearSelection();
                if (bValue)
                {
                    ddlSetting.Items.FindByValue(strValue).Selected = true;
                }
                else
                {
                    ddlSetting.Items.FindByText(strValue).Selected = true;
                }
      

  6.   

     "cannot have multiple selected items"
    sometimes when you are trying to set a item as the "selected" one in a dropdown List, it has already a selected one, and setting and other one as the selected will cause this error you are reporting, you should try this before setting the selectedindex or selecteditem property:ddlSeller.SelectedIndex = -1This will "unselect" any item on the dropdownList.Hope this helps. 
      

  7.   

    烦请回答FindByValue和FindByText的留意了,不是这个问题导致的,因为我也试过,问题依然!
    之所以不用这两个函数,而用循环判断,是因为如果strValue不在列表中,函数会报错,而循环无非是不设置任何选项。
      

  8.   


    SelectedIndex=-1与ClearSelection()意义是一样的,所以结果也是一样。
      

  9.   

    最简单的解决办法就是不用updatePanel,用ajaxpro.dll或其他的方式来实现ajax这样就没问题了
      

  10.   

    dropDownList1.SelectedValue=""值就是
      

  11.   


    用FindByValue和FindByText完全可以,你说的不在列表中会报错那是你的用法有问题,我把你的代码精简了一下,你运行试试看是否会报错:private void SetDDLItem(DropDownList ddlSetting, string strValue, bool bValue) 
        { 
            ddlSetting.SelectedIndex=-1;
    ListItem li;
    if(bValue)
        li=ddlSetting.Items.FindbyValue(strValue);
    else
        li=ddlSetting.Items.FindByText(strValue);
    if(li!=null)
        li.Selected=true;
    }=============================
    www.webdiyer.com
      

  12.   

    谢谢你告诉我FindByValue和FindByText的用法,可惜现在的主要问题并不在这里。
      

  13.   

    问题的原因或许不在这里  你是不是在一个页面下面有几个dropdownlist  出现问题的原因可能是这些dropdwonlist在某些情况下引用了同一个item项
      

  14.   

    1、看看你的aspx文件中是不是已经有Selected="True"了,如下
    <asp:ListItem Selected="True" Text="请选择" Value="0"></asp:ListItem>2、有人使用ClearSelection()解决3、有人使用.Trim()解决
    dropCurrenceType.Items.FindByValue(spInfo.CurrencyType.ToString().Trim()).Selected = true;
    dropCurrenceType.Items.FindByText(spInfo.CurrencyType.ToString().Trim()).Selected = true;
      

  15.   

    我猜你在页面加载绑定下拉控件的时候没有把代码放在
                        if (!Page.IsPostBack)
                        {
                           // 绑定的代码放在这里
                        }
    里面,导致控件一直绑定原选项,而你修改的时候与原来不同,就出现两个选中项,所以出错
      

  16.   

    感谢,我的就是有selected='true'了 
      

  17.   

    今天也遇到这问题了
    DDPType.ClearSelection();
    成功解决!!!!!
      

  18.   


    嗯,我的问题也是这个原因,有三个dropdownlist,都一个“请选择”的项,items.insert的是插入的同一个,结果就出错了
      

  19.   

    DDPType.ClearSelection();
    真的可以解决耶~~~~  谢谢!