下面的代码老是提示
“DropDownList1”有一个无效 SelectedValue,因为它不在项目列表中。
参数名: value 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.ArgumentOutOfRangeException: “DropDownList1”有一个无效 SelectedValue,因为它不在项目列表中。
参数名: value我是想把depid数字显示为部门编号,但是不知道为什么老是提示上面的错误,搞不清了,大家帮忙看看
<asp:FormView ID="FormView1" runat="server" AllowPaging="True" DataKeyNames="ID"
            DataSourceID="SqlDataSource1">
            <EditItemTemplate>
                ID:
                <asp:Label ID="IDLabel1" runat="server" Text='<%# Eval("ID") %>'></asp:Label><br />
                UserName:
                <asp:TextBox ID="UserNameTextBox" runat="server" Text='<%# Bind("UserName") %>'></asp:TextBox><br />
                PassWD:
                <asp:TextBox ID="PassWDTextBox" runat="server" Text='<%# Bind("PassWD") %>'></asp:TextBox><br />
                depname:
                <asp:TextBox ID="depnameTextBox" runat="server" Text='<%# Bind("depname") %>'></asp:TextBox><br />
                depid:
                <asp:TextBox ID="depidTextBox" runat="server" Text='<%# Bind("depid") %>'></asp:TextBox>
                <asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="SqlDataSource2" SelectedValue='<%# Bind("depid") %>' 
                    DataTextField="depid" DataValueField="depid" >
                </asp:DropDownList><br />
                <asp:LinkButton ID="UpdateButton" runat="server" CausesValidation="True" CommandName="Update"
                    Text="更新"></asp:LinkButton>
                <asp:LinkButton ID="UpdateCancelButton" runat="server" CausesValidation="False" CommandName="Cancel"
                    Text="取消"></asp:LinkButton>
            </EditItemTemplate>
            <InsertItemTemplate>
                UserName:
                <asp:TextBox ID="UserNameTextBox" runat="server" Text='<%# Bind("UserName") %>'>
                </asp:TextBox><br />
                PassWD:
                <asp:TextBox ID="PassWDTextBox" runat="server" Text='<%# Bind("PassWD") %>'>
                </asp:TextBox><br />
                depname:
                <asp:TextBox ID="depnameTextBox" runat="server" Text='<%# Bind("depname") %>'>
                </asp:TextBox><br />
                depid:
                <asp:TextBox ID="depidTextBox" runat="server" Text='<%# Bind("depid") %>'>
                </asp:TextBox><br />
                <asp:LinkButton ID="InsertButton" runat="server" CausesValidation="True" CommandName="Insert"
                    Text="插入">
                </asp:LinkButton>
                <asp:LinkButton ID="InsertCancelButton" runat="server" CausesValidation="False" CommandName="Cancel"
                    Text="取消">
                </asp:LinkButton>
            </InsertItemTemplate>
            <ItemTemplate>
                ID:
                <asp:Label ID="IDLabel" runat="server" Text='<%# Eval("ID") %>'></asp:Label><br />
                UserName:
                <asp:Label ID="UserNameLabel" runat="server" Text='<%# Bind("UserName") %>'></asp:Label><br />
                PassWD:
                <asp:Label ID="PassWDLabel" runat="server" Text='<%# Bind("PassWD") %>'></asp:Label><br />
                depname:
                <asp:Label ID="depnameLabel" runat="server" Text='<%# Bind("depname") %>'></asp:Label><br />
                depid:
                <asp:Label ID="depidLabel" runat="server" Text='<%# Bind("depid") %>'></asp:Label><br />
                <asp:LinkButton ID="EditButton" runat="server" CausesValidation="False" CommandName="Edit"
                    Text="编辑">
                </asp:LinkButton>
                <asp:LinkButton ID="DeleteButton" runat="server" CausesValidation="False" CommandName="Delete"
                    Text="删除">
                </asp:LinkButton>
                <asp:LinkButton ID="NewButton" runat="server" CausesValidation="False" CommandName="New"
                    Text="新建">
                </asp:LinkButton>
            </ItemTemplate>
        </asp:FormView>
        &nbsp; &nbsp;<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConflictDetection="CompareAllValues"
            ConnectionString="<%$ ConnectionStrings:jbwebschoolConnectionString %>" DeleteCommand="DELETE FROM [FT_User] WHERE [ID] = @original_ID"
            InsertCommand="INSERT INTO [FT_User] ([UserName], [PassWD], [depname], [depid]) VALUES (@UserName, @PassWD, @depname, @depid)"
            OldValuesParameterFormatString="original_{0}" SelectCommand="SELECT [ID], [UserName], [PassWD], [depname], [depid] FROM [FT_User]"
            UpdateCommand="UPDATE [FT_User] SET [UserName] = @UserName, [PassWD] = @PassWD, [depname] = @depname, [depid] = @depid WHERE [ID] = @original_ID">
            <DeleteParameters>
                <asp:Parameter Name="original_ID" Type="Int32" />
            </DeleteParameters>
            <UpdateParameters>
                <asp:Parameter Name="UserName" Type="String" />
                <asp:Parameter Name="PassWD" Type="String" />
                <asp:Parameter Name="depname" Type="String" />
                <asp:Parameter Name="depid" Type="Int32" />
                <asp:Parameter Name="original_ID" Type="Int32" />
            </UpdateParameters>
            <InsertParameters>
                <asp:Parameter Name="UserName" Type="String" />
                <asp:Parameter Name="PassWD" Type="String" />
                <asp:Parameter Name="depname" Type="String" />
                <asp:Parameter Name="depid" Type="Int32" />
            </InsertParameters>
        </asp:SqlDataSource>
        <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:jbwebschoolConnectionString %>"
            SelectCommand="SELECT [depid], [depname], [deptype], [depnumber] FROM [dep]"></asp:SqlDataSource>

解决方案 »

  1.   

    刚刚写错了:我是想把depid数字显示为部门名称,但是不知道为什么老是提示上面的错误,搞不清了,大家帮忙看看
      

  2.   

    DataTextField="depName" DataValueField="depid" 
     Bind("depid") 这个方法返回一个DATATABLE吗
      

  3.   

    这个绑定并没有任何问题,很可能是测试数据的问题:[FT_User]表中有些行的deptid在[dep]表中不存在或者值为<null>
      

  4.   

    <asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="SqlDataSource2" SelectedValue='<%# Bind("depid") %>' 
                        DataTextField="depname" DataValueField="depid" >
      

  5.   

    SelectedValue='<%# Bind("depid") %>' 
    这句有问题,Bind("depid")得到的结果在你数据源的deptid里肯定没有
      

  6.   

    SelectedValue不能赋值,用SelectedIndex
      

  7.   

    偶上面已经强调了:
    SelectedValue='<%# Bind("depid") %>' 这个绑定语法完全是正确的!上面有其他说法的兄弟们要注意更正自己原先错误的理解了。
      

  8.   

    俺也要强调:
    SelectedValue不能赋值,用SelectedIndex
      

  9.   

    页面上 SelectedValue='<%# Bind("depid") %>'  应该是可以的
      

  10.   

    to 楼上:   即便您说地球是方的那就是方的了,偶无意跟您争论,但是,为什么你就连打开.net framework sdk 或者写一行代码验证一下这么简单的事都不愿意做呢?============================================================================== 
    .NET Framework 类库   ListControl.SelectedValue 属性请参见
    ListControl 类 | ListControl 成员 | System.Web.UI.WebControls 命名空间 | SelectedItem | SelectedIndex | DataValueField | Items | ListItem | System.ArgumentOutOfRangeException | C++ 托管扩展编程 
    要求
    平台: Windows 2000, Windows XP Professional, Windows Server 2003 系列
    语言
    C#C++JScriptVisual Basic全部显示
    注意:此命名空间、类或成员仅在 .NET Framework 1.1 版中受支持。 
    获取列表控件中选定项的值,或选择列表控件中包含指定值的项。[Visual Basic]
    Public Overridable Property SelectedValue As String[C#]
    public virtual string SelectedValue {get; set;}[C++]
    public: __property virtual String* get_SelectedValue();
    public: __property virtual void set_SelectedValue(String*);[JScript]
    public function get SelectedValue() : String;
    public function set SelectedValue(String);属性值
    列表控件中选定项的值。默认值为空字符串 ("")。异常
    异常类型 条件 
    ArgumentOutOfRangeException SelectedValue 属性的设定值与列表控件中的项不相符。 备注
    通常使用 SelectedValue 属性确定列表控件中选定项的值。如果未选定任何项,则返回一个空字符串 ("")。SelectedValue 属性还可以用于选择列表控件中的某一项,方法是用该项的值设置此属性。如果列表控件中的任何项都不包含指定值,则会引发 System.ArgumentOutOfRangeException。..........
      

  11.   

    你的DropDownList1是放在一个模板列中吗,如果是,请将sqldatasoure放入模板中
      

  12.   

    Eddie005(♂) №.零零伍 (♂)  
    完全正确,SelectedValue当然可以绑定赋值,说不可以的同学自己试试吧,不知道被谁误了lz代码看不出问题,只能是你数据源返回的值确实不在DrowDownList的列表中(注意null),可以试着监控该值或者,DropDownList或FromView 的Binding事件中写代码处理,试着用DropDownList.Items.FindByValue(v)查找item
      
     
      

  13.   

                               myLanmu.SearchPDName();
    dl_pdname.DataTextField = "lm_name";
    dl_pdname.DataValueField = "lm_id";
    dl_pdname.DataSource = myLanmu.DataSource;
    dl_pdname.DataBind();DropDownList 绑顶数据很简单,你怎么搞得那么麻烦?
      

  14.   

    强烈关注中!的确没有找到一个有效的方法。
    主要问题出在,GRIDVIEW所bind的数据库中的值,在dropdownlist中找不到,查了资料说是因为sql出来的值("abc   ")前后有空格,所以和dropdownlist中的值("abc")不匹培造成,如何解决我也一直没有找到方法。
      

  15.   

    DROPDOWNLIST的绑定还是最好放在后台
    然后数据库不匹配的问题我是这样解决的
    首先是dropdownlist的绑定,没有使用DATASET的方式,而是采用sqldatareader,这里效率应该比dataset高
    ///////////////////////////////////////
    Dim dlctype As SqlDataReader
    dlctype = ......(取出sqldatareader)
    Do While dlctype.Read
         Me.dl_ctype.Items.Add(New ListItem(dlctype("id"), dlctype("name")))
    Loop
         Me.dl_ctype.Items.Insert(0, New ListItem("未分类", 0))
    dlctype.Close()
    /////////////////////////////////
    dropdownlist的赋值,如果没有匹配值,则增加一个值
    ///////////////////////////////////
    Try
          Me.dl_ctype.SelectedValue = Reader("name")
    Catch ex As Exception
           Me.dl_ctype.Items.Insert(1, New ListItem(Reader("id"), Reader("name")))
           Me.dl_ctype.SelectedValue = Reader("ctype")
    End Try
      

  16.   

    为DropDownList1的SelectedValue属性付的数值的前提是DropDownList1中已经存在这个数据值,付值实际上是找到匹配的数值然后使其成为当前选中的数值显示出来..
      

  17.   

    从报错上看是没有找到匹配的数据。
    DropDownList1.SelectedIndex=DropDownList1.Item.IndexOf(DropDownList1.Item.FindByText("部门名称"));能达到同样的效果,但条件是DropDownList1的text中必须的有“部门名称”这个数值。
      

  18.   

    在DropDownList的DataBind事件里面写this.DropDownList1.SelectedValue = XXX;