C# 错误:';asp:DropList';具有无效的SelectedValue,因为它不在项目列表中。参数名称:value
我的应用程序中有一个动态填充的droplist,嵌套在引发上述错误的formview中: 下面是引发错误的控件的html。我在编辑和插入模板中都有这个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
<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()));
}