2013-02-08 16 views
0

我有一個頁面,有5個用戶控件相同的類型。每個用戶控件都有一個gridview和一些按鈕。爲什麼gridview控件(在用戶控件中)在回發後不保留其屬性值?

我不明白爲什麼用戶控件上的控件不保留它們的值。

編輯

下面是我如何填充用戶控件中的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; 
     } 
    } 

我試着在main aspx頁面上添加一個複選框。當頁面回傳時,檢查可以保留其價值。我也嘗試過用戶控件,但不是在gridview中。回發時,複選框保留其值。

它看起來像只在GridView中,在回發後控件失去它們的值。我已經添加了ViewStateMode =「Enabled」首先在aspx頁面上,然後在usercontrol和finview上查看gridview本身,但沒有成功。

任何理由?

+0

您是否在代碼隱藏中動態添加用戶控件,或者它們是否存在於aspx頁面中? – 2013-02-08 19:40:54

+0

它們出現在aspx頁面 – Richard77 2013-02-08 19:43:38

+0

您在頁面生命週期的哪個位置填充用戶控件?我想知道如果viewstate _is_恢復,但也許你正在重新填充數據,它會被覆蓋。你有圍繞usercontrol人口代碼的if(!Page.IsPostBack)嗎? – 2013-02-08 19:55:21

回答

1

在我看來,每PostBack你打電話DataBind()。如果Page.IsPostBack等於false,則只能撥打DataBind()

+0

做出敏感。現在它保留了價值。我忽略了PageLoad在其他事件處理程序執行之前發生的事實。 – Richard77 2013-02-08 21:14:01

+0

視圖狀態在「Page_Load」之前恢復。如果你調用'gvCKList.DataBind()',你正在覆蓋網格的子控件。 :) – maxbeaudoin 2013-02-08 21:16:27

相關問題