private void dropBind()    //绑定下拉列表
    {
1        dropId.Items.Clear();
2        string strSql = "select * from AClass";
3        DataSet dsA = SqlBase.ExecuteSqlDataSet(strSql);
4        dropId.DataSource = dsA.Tables[0].DefaultView;
5        dropId.DataBind();
6        dropId.Items.Add(new ListItem("所有类型", "0"));
7        dropId.SelectedValue = "0";
    } 设断点
调试时从第1句往下执行到第7句时Items里有[0] 摄像机
                                        [1] 电脑
                                        [2] 所有类型
但是点继续的时候又跳到第1句执行到第5句,此时查看Items里已是null值。然后就会报如下错误:
“dropId”有一个无效 SelectedValue,因为它不在项目列表中。参数名: value

解决方案 »

  1.   

    DataTextField就DataValueField的属性呢??
      

  2.   

    你是不是onselectchenage事件里有操作
      

  3.   

    我不理解你跑到第七行了怎么就又回到第一行了?
    你还有什么调用dropBind它了吗?
      

  4.   

    @sy_binbin :DataTextField就DataValueField的属性呢?? 什么意思?跟它啥关系?
    @haozi678   xiaolei1982 我只在下面调用了它:
     protected void Page_Load(object sender, EventArgs e)
        {
            if (!this.IsPostBack)
            {
               ViewState["ClassA"] = "";       
                dropBind();
            }
        }
      

  5.   

    Yes!我QQ270106228,如果谁有兴趣和时间希望能远程控制我电脑帮我调试一下
      

  6.   

    Autopostback = true? 
    有判断也不应该出这种现象呀
      

  7.   


    private void dropBind()    //绑定下拉列表 
        { 
           dropId.Items.Clear(); 
           string strSql = "select * from AClass"; 
           DataSet dsA = SqlBase.ExecuteSqlDataSet(strSql); 
           if(dsA.Tables[0].Rows.Count>0)
           {
               dropId.Items.Add(new ListItem("请选择",0);
               for(int i=0;i<dsA.Tables[0].Rows.Count;i++)
               {
                   DataRow dRow = dsA.Tables[0].Rows[i];
                   string txt = dRow["文字列"].ToString();
                   string txtID = dRow["文字列ID"].ToString();
                   dropId.Items.Add(new ListItem(txt,txtID));
               }
           }
           dropId.SelectedIndex=0;
        } 
      

  8.   

    楼上这个写法和dsA.Tables[0].Rows.insertat有什么区别
    dsA.Tables[0].Rows.insertat应该省事吧
      

  9.   

    在onselectchange事件里有操作吧
    private void dropBind()    //绑定下拉列表 
    {         
        dropId.Items.Clear(); 
        string strSql = "select * from AClass"; 
        DataSet dsA = SqlBase.ExecuteSqlDataSet(strSql); 
        dropId.DataSource = dsA.Tables[0].DefaultView; 
        dropId.DataBind(); 
        dropId.Items.Insert(0, new ListItem("所有类型", "0"));  //直接把这个插入到第一条,就不用再改变选中项了
    }
      

  10.   

    protected void Page_Load(object sender, EventArgs e)
        {
            if (!this.IsPostBack)
            {
              ViewState["ClassA"] = "";     
                dropBind();
            }
    6        dropId.Items.Add(new ListItem("所有类型", "0"));
    7        dropId.SelectedValue = "0";
        }private void dropBind()    //绑定下拉列表
        {
    1        dropId.Items.Clear();
    2        string strSql = "select * from AClass";
    3        DataSet dsA = SqlBase.ExecuteSqlDataSet(strSql);
    4        dropId.DataSource = dsA.Tables[0].DefaultView;
    5        dropId.DataBind();    } 
      

  11.   

    private void dropBind()    //绑定下拉列表 
    {
        dropId.Items.Clear(); 
        string strSql = "select * from AClass"; 
        DataSet dsA = SqlBase.ExecuteSqlDataSet(strSql); 
        dropId.DataSource = dsA.Tables[0].DefaultView;
        dropId.DataValueField = "你要绑定的值字段";
        dropId.DataTextField = "你要显示的字段";
        dropId.DataBind(); 
        dropId.Items.Insert(0, new ListItem("所有类型", "0"));
        dropId.Items.FindByValue("0").Selected = true;
      

  12.   


            dropId.Items.Clear();
            string strSql = "select * from AClass";
            DataSet dsA = SqlBase.ExecuteSqlDataSet(strSql);
            DataRow dr = dsA.Tables[0].NewRow();
            dsA.Tables[0].Rows.InsertAt(dr, 0);
            dropId.DataSource = dsA.Tables[0].DefaultView;
            dropId.DataBind();
    这样多好,就是不知道能不能解决问题
      

  13.   


    此代码运行正常。但是还是执行两遍。仔细看了下在onselectchange事件里果真有操作。但是我删除此事件发现代码依旧执行两遍。不知为何?
      

  14.   

    看看有哪些地方调用了dropBind(),代码搜索一下即可    
      

  15.   

        private void dropBind()    //绑定下拉列表 
        {
            dropId.Items.Clear(); 
            string strSql = "select * from AClass"; 
            DataSet dsA = SqlBase.ExecuteSqlDataSet(strSql); 
            dropId.DataSource = dsA.Tables[0].DefaultView;
            dropId.DataTextField = "文字字段";
            dropId.DataValueField = "值字段";
            dropId.DataBind();         dropId.Items.Add(new ListItem("所有类型", "0")); 
            //加上
            dropId.ClearSelection();
            dropId.Items.FindByValue("0").Selected = true;
            //去掉 dropId.SelectedValue = "0"; 
        }
      

  16.   


            dropId.Items.Clear();
            string strSql = "select * from AClass";
            DataSet dsA = SqlBase.ExecuteSqlDataSet(strSql);
            DataRow dr = dsA.Tables[0].NewRow();
            dr[0]="所有类型";
            dsA.Tables[0].Rows.InsertAt(dr, 0);
            dropId.DataSource = dsA.Tables[0].DefaultView;
            dropId.DataBind();这样就可以了
      

  17.   


    private void dropBind()    //绑定下拉列表 
        { 
    1        dropId.Items.Clear(); 
    2        string strSql = "select * from AClass"; 
    3        DataSet dsA = SqlBase.ExecuteSqlDataSet(strSql); 
    4        dropId.DataSource = dsA.Tables[0].DefaultView; 
             dropId.DataText="你要显示的字段文本";
    5        dropId.DataValue="真实的值";
             dropId.DataBind(); 
             dropId.Items.Insert(0, new ListItem("所有类型", "0"));  //默认就是选择第一个,不大需要再去选择第一个
        } 
      

  18.   

    用户控件的后台代码中,记得老师说需要对HTML中定义的每个页面控件定义一个与之相对应的成员变量,可是我不知道如何声明这个变量。 
    比如:我在HTML(News.aspx)中加入一个<div  id="Div1" runat="server"></div>
    在后台我这样声明protected HtmlGenericControl Div1;一个变量与之对应,但运行的时候报错:“News”已经包含“Div1”的定义。把"Div1"换成其它变量名又报错“未能将对象的引用设置到对象的实例”我记得以前这样做可以正常运行啊,无语///
      

  19.   

    dropId.Items.Insert(0, (new ListItem("所有类型", "0")))
      

  20.   

    void DdlChangeSelectInfo(string type)
        {
            CommonBLL comBLL = new CommonBLL();
            this.ddlField.DataSource = comBLL.GetObjectField(type);//GetObjectField返回datatable。
            ddlField.DataTextField = "Text";
            ddlField.DataValueField = "Name";
            this.ddlField.DataBind();
        }
    我的项目中这样实现.........
      

  21.   

    protected void Page_Load(object sender, EventArgs e) 
        { 
            if (!this.IsPostBack) 
            { 
              ViewState["ClassA"] = "";      
                dropBind(); 
            } 
        }AutoPostBack=true;
    这样,也不会运行多次,建议你跟踪下IsPostBack的值,如果是IsPostBack的值出现问题,看看有没有其他的一些事件触发了.
    实在没有,就只能这样写了:if (!this.IsPostBack&&dropId.Items.Count==0)

        ViewState["ClassA"] = "";      
        dropBind(); 
    } 不过还是觉得你得找出根源来比较好.
      

  22.   

    dropId.Items.Insert()方法就可以.自己查一下.
      

  23.   

    TMD的bug
    我也曾经郁闷很久
    我的估计是 value 为 0 的items有多个
    如果有多个之后不符合selected只有一个的规定.
    抱错也抱,
    我为了图省事,一直用的SelectedIndex