另一个方法中这样声明的
DropDownList ddl = new DropDownList();
                ddl.ID = "ddl_" + pro.Property_ID.ToString();
                ddl.DataTextField = "PV_Value";
                ddl.DataValueField = "PropertyValues_ID";
                ddl.Width = Unit.Pixel(400);首次加载各DropDownList均没问题,联动效果的时候,重新绑定却出问题
”DropDownList有一个无效的SelectedValue 因为它不在项目列表中“
奇怪的是,我已经做了ddl.Items.Clear();和重设SelectedIndex 处理,ddl.DataBind();的时候依然出这个错误。
请各位帮忙出主意,加班中,很急
        private int BindDLL(Property pro,DropDownList ddl,bool isFahter,int ppr_id,int fatherId)
        {
            ddl.Items.Clear();
            if(ddl.Items.Count > 0)
                ddl.SelectedIndex = 0;
            else
                ddl.SelectedIndex = -1;

            if(ppr_id!=0)
                ddl.DataSource = BPropertyValues.GetListByRelation(ppr_id, fatherId);
            else
                ddl.DataSource = BPropertyValues.GetExtendValues(pro.Property_ID, 1);
            if(isFahter)
            {
                ddl.SelectedIndexChanged += new EventHandler(ddlInput_SelectedIndexChanged);
                ddl.AutoPostBack = true;
            }
            ddl.DataBind();//这里第一次绑定没错,第二次绑定出错            if(pro.Pro_IsMust == 0)
            {
                ListItem item = new ListItem();
                item.Text = "--请选择--";
                item.Value = "0";
                ddl.Items.Insert(0, item);
                ddl.SelectedIndex = 0;
            }
            else if(ddl.Items.Count>0)
                ddl.SelectedIndex = 0;
            if(PageType == "update")
            {
                if(TM.TP_List.ContainsKey(pro.Property_ID.ToString()))
                {
                    ListItem item = new ListItem(TM.TP_List[pro.Property_ID.ToString()].TP_Value, TM.TP_List[pro.Property_ID.ToString()].PropertyValues_ID.ToString());
                    if(pro.Pro_IsMust == 0)
                    {
                        if(!ddl.Items.Contains(item))
                        {
                            ddl.Items.Insert(1, item);
                            ddl.SelectedIndex = 1;
                        }
                        else
                            ddl.SelectedValue = item.Value;
                    }
                    else
                    {
                        if(!ddl.Items.Contains(item))
                        {
                            ddl.Items.Insert(0, item);
                            ddl.SelectedIndex = 0;
                        }
                        else
                            ddl.SelectedValue = item.Value;
                    }
                }
            }
            int selectValue = 0;
            if(ddl.Items.Count>0)
                selectValue = Convert.ToInt32(ddl.SelectedValue);
            return selectValue;
        }

解决方案 »

  1.   

    其实不需要那么麻烦,根据级联的条件··来进行新的查询
    1,清空ITEMS
    2,直接进行 datasource=“新的数据源” 你自己查询出来的
    3,ddl1,databind();
    然后判断需要选择的selectedvalue等于你查找的数据源就哦了
      

  2.   

    回2楼的,Items已经清空,datasource也重新绑定,最后一步都做了,关键是items.clear()后重新绑定报错。所以非常奇怪
      

  3.   

    if(ddl.Items.Count > 0)
                    ddl.SelectedIndex = 0;
                else
                    ddl.SelectedIndex = -1;
    改为==>if(ddl.Items.Count > 0)
                    ddl.SelectedIndex = 0;
      

  4.   

    DropDownList 的选项中没有对应SelectedValue的项
    如果没有数据,没有默认提示无效 SelectedValue
      

  5.   

    回五楼的,有数据,断点调试过。
    现在是使用了items.clear(),更改selectedIndex,甚至设定selectedValue为空“”,都没用。每个dropdownlist都调用该方法绑定数据,首次加载没问题,但是级联时却出现这个错误。绑定数据源的数据是有的。三条
      

  6.   

    aspx页面上的DropDownList控件上有无 SelectedValue='<%# Bind("xxx") %>' 这样的代码,
    有的话,问题大至出在这里。
      

  7.   

    DropDownList有一个无效的SelectedValue,是因为你的数据库表设计有主外键关系,其中外键表里的数据没有主键表里的主键
      

  8.   

    回11楼,这种情况不存在,如果外键表数据主键表不存在,那这条数据根本就无法存在,除非允许外键为空
    其次,数据绑定在DropDownList上的时候,即使外键列为空,代码里该属性默认也是0,绑定是不管是否数据存在问题,只管相应的text和value对应上即可
      

  9.   

    其实不需要那么麻烦,根据级联的条件··来进行新的查询 
    1,清空ITEMS 
    2,直接进行 datasource=“新的数据源” 你自己查询出来的 
    3,ddl1,databind(); 
    然后判断需要选择的selectedvalue等于你查找的数据源就哦了
      

  10.   

    比如你要设置11为选择项,但是你的dropdownlist中却没有这个项,这个不出错才怪呢。
      

  11.   

    我已经重设selectedindex为-1了,拜托!
      

  12.   

    selectedIndex应该重设为-1,再执行DataBind()
      

  13.   

    楼主到底怎么解决这问题的啊,跟我们分享哈,我现在也出现了同样的问题,代码如下:
        ddl_title.Items.Clear();
                Titles tl = new Titles();
                ddl_title.DataSource = tl.GetAllTitle().Tables[0].DefaultView;
                ddl_title.DataTextField = "titlecontent";
                ddl_title.DataValueField = "titleid";
                ddl_title.DataBind();
                ddl_title.Items.Insert(0,"Please Choose Title");
      

  14.   

    我也出现这个问题,找了大半天才找到根源。也许不适合每一个人的情况,请参考:http://blog.sina.com.cn/s/blog_4d96ee050101440u.html
      

  15.   

    这样就可以了。
    ddl_title.Items.Clear()
    ddl_title.Text = Nothing
    ddl_title.DataBind()