2013-02-08 4 views
0

У меня есть страница, которая имеет 5 пользовательских элементов управления того же типа. Каждый пользовательский элемент управления имеет сетку и пару кнопок.Почему элементы управления внутри gridview (который находится внутри пользовательского элемента управления) не сохраняют значения своих свойств после обратной передачи?

Я не понимаю, почему элементы управления на пользовательских элементах управления не сохраняют свое значение.

EDIT

Ниже, как я наполнении GridView внутри пользовательского элемента управления.

protected void Page_Load(object sender, EventArgs e) 
    { 
     var list = new List<CKListByDprtment> 
     { 
      new CKListByDprtment { ID = 1, TaskName = "New laptop needed", 
      CompletedBy = "My Boss", HMReq = true }, 
      new CKListByDprtment { ID = 2, TaskName = "New Workstation needed", 
      CompletedBy = "My Boss", HMReq = false } 
     }; 

     gvCKList.DataSource = list; 
     gvCKList.DataBind();   

    } 
    #endregion 

    #region GridView Validation 
    protected void cvValidateGrid_ServerValidate(object sender, ServerValidateEventArgs args) 
    { 
     ValidateGrid(); 
    } 

    private void ValidateGrid() 
    { 
     foreach (GridViewRow gvRow in gvCKList.Rows) 
     { 
      CheckBox ckHMreq = gvRow.Cells[0].FindControl("ckHMreq") as CheckBox; 
     } 
    } 

Я попытался добавить флажок на главной странице aspx. Когда страница была отправлена ​​назад, проверяемый смог сохранить ее значение. Я также пытался использовать элемент управления пользователя, но не внутри gridview. При обратной передаче флажок сохранил свое значение.

Он выглядит только внутри сетки, где элементы управления теряют свои значения после обратной передачи. Я добавил ViewStateMode = «Включено» сначала на странице aspx, затем в usercontrol и finaly на самом экране gridview, но без успеха.

Любая причина?

+0

Вы добавляете пользовательские элементы управления динамически в код-позади или присутствуют ли они на странице aspx? –

+0

Они присутствуют на странице aspx – Richard77

+0

Где на жизненном цикле страницы вы заполняете пользовательские элементы управления? Мне интересно, восстановлен ли viewstate _is_, но, возможно, вы повторно заполняете данные, и он перезаписывается. У вас есть 'if (! Page.IsPostBack)' вокруг кода пользователя usercontrol? –

ответ

1

Мне кажется, что за каждые PostBack вы звоните DataBind(). Вы должны позвонить только DataBind(), если Page.IsPostBack равно false.

+0

Сделать ощущение. Теперь он сохраняет значения. Я упускал из виду тот факт, что PageLoad происходит до того, как другие обработчики событий вступят в действие. – Richard77

+0

Viewstate восстанавливается до 'Page_Load'. Если вы вызываете 'gvCKList.DataBind()', вы переписываете дочерние элементы сетки. :) – maxbeaudoin

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

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