2013-03-04 2 views
0

У меня есть DropDownList, который я должен заполнить в событии, связанном с событием клика другого элемента управления. Данные заполняются и присутствуют, но когда я выбираю значение и возвращает значение, значение равно null. Это означает, что состояние представления не работает. Решения говорят, что заполнение DropDown в Init(), но я не могу, потому что это требование не позволяет. Я должен заполнить его на событие щелчка .. Viewstates включены .. Следующий код заполнит DropDown ..DropDownList-Items имеют значение null для postback

if (e.CommandName == "Add Friend")   
{ 
    HtmlGenericControl divMySub = (HtmlGenericControl)GridViewUserSubjects.Rows[Convert.ToInt32(e.CommandArgument)].FindControl("divMySubjects"); 
    divMySub.Style["display"] = "block"; 

    DropDownList mySub = (DropDownList)GridViewUserSubjects.Rows[Convert.ToInt32(e.CommandArgument)].FindControl("DropDownListMySubjectz"); 
    UpdatePanel mySubPanel = (UpdatePanel)GridViewUserSubjects.Rows[Convert.ToInt32(e.CommandArgument)].FindControl("UpdatePanelRequestAction"); 
    DataView SubjectTableView = ProfileDataAccess.GetUserUnusedSubjectsForRequest(UserId ,RequesterId).DefaultView; 
    if (SubjectTableView.Count > 0) 
    { 
     mySub.DataSource = SubjectTableView; 
     mySub.DataTextField = "Name"; 
     mySub.DataValueField = "Id"; 
     mySub.DataBind(); 

    } 
    else 
    { 
     divMySub.InnerText = "Requests Complete"; 
     LinkButton buttonlink= (LinkButton)sender; 
     buttonlink.Enabled = false; 
    } 
     mySubPanel.Update(); 
} 

и следующий код для обратной передачи, который извлекает значение из выпадающего списка .. Для DropDown находится внутри строки Gridview.

protected void LinkButtonAddFriend_Command(object sender, CommandEventArgs e) 
{ 
    Guid RequestedId = new Guid(Membership.GetUser().ProviderUserKey.ToString()); 
    Guid UserId = new Guid(HiddenFieldUserId.Value.ToString()); 
    int UserSubjectId = Convert.ToInt32 (GridViewUserSubjects.DataKeys[Convert.ToInt32(e.CommandArgument)].Value); 
    DropDownList DDL = (DropDownList)GridViewUserSubjects.Rows[Convert.ToInt32(e.CommandArgument)].FindControl("DropDownListMySubjectz"); 
    LinkButton RequestAction = (LinkButton)GridViewUserSubjects.Rows[Convert.ToInt32(e.CommandArgument)].FindControl("LinkButtonFriendAction"); 
    int RequesterSubjectId = Convert.ToInt32(DDL.SelectedItem.Value); 

    if (FriendsDataAccess.InsertRequest(UserId, RequestedId, UserSubjectId, RequesterSubjectId)) 
    { 
     RequestAction.Text = "Remove Request"; 
     RequestAction.Enabled = true; 
    } 
} 

DDL - это раскрывающийся список с проблемами.

+2

отредактируйте ваш заголовок вопроса - выпадающее значение написано неправильно –

+0

отредактировано Могу ли я получить предложения сейчас? – spiral

ответ

1

Когда вы привязываете данные к GridView, который является контейнером DropDownList? Вы завернули его в if(!IsPostBack) -check? Когда вы привязываете GridView, дочерние элементы управления всегда «перезагружаются».

Если вы используете декларативный элемент управления данными, например ObjectDataSource, вам следует избегать this.databind(), если это не необходимо.

+0

Да, определенно ... Я решил теперь никогда не использовать this.databind(). Это второй раз, когда он потратил всю мою неделю. Спасибо Тиму. Я очень рад, я не могу сказать. – spiral

Смежные вопросы