C# 错误:';asp:DropList';具有无效的SelectedValue,因为它不在项目列表中。参数名称:value

C# 错误:';asp:DropList';具有无效的SelectedValue,因为它不在项目列表中。参数名称:value,c#,asp.net,sql-server-2008,webforms,C#,Asp.net,Sql Server 2008,Webforms,我的应用程序中有一个动态填充的droplist,嵌套在引发上述错误的formview中: 下面是引发错误的控件的html。我在编辑和插入模板中都有这个 <asp:DropDownList ID="CreatedByDropList" AppendDataBoundItems="true" SelectedValue='<%# Bind("CreatedBy") %>' runat="server" /> 在幕后,我使用以下脚本试图用数据表填充dropList SqlC

我的应用程序中有一个动态填充的droplist,嵌套在引发上述错误的formview中:

下面是引发错误的控件的html。我在编辑和插入模板中都有这个

<asp:DropDownList ID="CreatedByDropList" AppendDataBoundItems="true" 
SelectedValue='<%# Bind("CreatedBy") %>' runat="server" />
在幕后,我使用以下脚本试图用数据表填充dropList

SqlCommand cmd = new SqlCommand(@"SELECT RLS.RoleName [RoleName], URS.UserID [UserID], USRS.UserName[UserName], USRS.FirstName[FirstName], USRS.LastName[LastName]
    FROM [Roles] RLS Inner JOIN [Users] USRS LEFT JOIN [UserRoles] URS 
    ON USRS.[UserID] = URS.[UserID] ON RLS.[RoleID] = URS.[RoleID] 
    WHERE RLS.[RoleName] = 'Blog Editors'",conn);
conn.Open();

using (SqlDataReader reader1 = cmd.ExecuteReader())
{
    while (reader1.Read())
    {
        int numUserID = reader1.GetInt32(1);
        string strFirstName = reader1.GetString(3);
        string strLastName = reader1.GetString(4);
        string newUserName = strFirstName + " " + strLastName;

        ddlCreatedBy.Items.Add(new ListItem(newUserName, numUserID.ToString()));
    }
当我运行这段代码,并将formview置于编辑模式时,我得到了这个错误

“CreatedByDropList”有一个SelectedValue,该值无效,因为它不在项目列表中。参数名称:value

但是,如果我删除
SelectedValue='
,则会出现此错误


数据绑定:“System.Data.DataRowView”不包含名为“numUserID”的属性。

对于第一个问题,在您引用的SQL命令填充
aspx
文件之前,您似乎正在初始化该文件中的
SelectedValue
。看一看这张照片

我认为应该在事件处理程序中设置此值,如
页面加载

对于第二个问题,您似乎试图访问数组/列表的
numUserID
键,而不是您在问题中提供的源代码(如GridView或其他)

SqlCommand cmd = new SqlCommand(@"SELECT RLS.RoleName [RoleName], URS.UserID [UserID], USRS.UserName[UserName], USRS.FirstName[FirstName], USRS.LastName[LastName]
    FROM [Roles] RLS Inner JOIN [Users] USRS LEFT JOIN [UserRoles] URS 
    ON USRS.[UserID] = URS.[UserID] ON RLS.[RoleID] = URS.[RoleID] 
    WHERE RLS.[RoleName] = 'Blog Editors'",conn);
conn.Open();

using (SqlDataReader reader1 = cmd.ExecuteReader())
{
    while (reader1.Read())
    {
        int numUserID = reader1.GetInt32(1);
        string strFirstName = reader1.GetString(3);
        string strLastName = reader1.GetString(4);
        string newUserName = strFirstName + " " + strLastName;

        ddlCreatedBy.Items.Add(new ListItem(newUserName, numUserID.ToString()));
    }