2014-01-27 4 views
0

Я пытаюсь заполнить asp:DropDownList данными от SQL и с использованием данных. Однако я получаю ошибку «CreatedByDropList» имеет значение SelectedValue, которое недействительно, потому что оно не существует в списке элементов. Имя параметра: значениеКак я могу динамически заполнить дропшник, который вложен в вид формы с использованием данных?

asp:DropDownList Внутри формы вид, который выбирает, заполнен сеткой.

здесь является HTML для управления выпадающего списка в Edit и Insert шаблона в FormView:

<asp:DropDownList ID="CreatedByDropList" AppendDataBoundItems="true" SelectedValue='<%# Bind("CreatedBy") %>' runat="server" /> 

Вот код Сзади:

protected void FormView1_DataBound(object sender, EventArgs e) 
{ 
    if (FormView1.CurrentMode == FormViewMode.Insert) 
    { 
     DropDownList ddlCreatedBy = FormView1.FindControl("CreatedByDropList") as DropDownList; //Placed BreakPoint Here 

     using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["MySqlServer"].ConnectionString)) 
     { 
      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; 
       } 

        SqlDataAdapter da = new SqlDataAdapter(cmd); 
        DataTable dt = new DataTable(); 
        da.Fill(dt); 
        ddlCreatedBy.DataSource = dt; 
        ddlCreatedBy.DataTextField = "newUserName";//Placed BreakPoint Here 
        ddlCreatedBy.DataValueField = "numUserID";//Placed BreakPoint Here 
        ddlCreatedBy.DataBind(); 
      } 



     } 

} 

Я поместил Breakpoints повсюду для некоторого поиска неисправностей но окно отладки остается пустым (что означает, что все окна отладки пусты и бесполезны) все время.

ответ

0

читатель 1 ничего не делает. Это просто повторение всех строк, возвращаемых из команды, назначение их переменным, а затем ничего не с ними делать, насколько показывает этот фрагмент.

Кроме того, у вас нет столбцов в вашем DataTable с именем «newUserName» или «numUserId». Измените последние 4 строки на это:

foreach(DataRow row in dt.Rows) 
{ 
    ddlCreatedBy.Items.Add(new ListItem(row["FirstName"] + " " + row["LastName"], row["UserId"]); 
} 
+0

Это дает мне следующую ошибку: «невозможно преобразовать из объекта в строку», –