2013-02-08 42 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

相关问题