Gridview中的TemplateField中的复选框在回发时丢失

我有一个带有模板字段的gridview。 在该模板字段中是一个复选框。 我在gridview之外有一个提交按钮来分配已检查的记录。 在回发时没有复选框注册为正在检查。 这是我的代码:

    <asp:Label ID="lblCFID" runat="server" Visible="false" Text='' />           protected void AssignRecords(object sender, EventArgs e) { int Rows = gvASH.Rows.Count; for (int i = 0; i < Rows; i++) { //CheckBoxField cb = ((CheckBoxField)gvASH.Rows[i].Cells[1]).; CheckBox cb = (CheckBox)gvASH.Rows[i].Cells[0].FindControl("cb"); Label lblID = (Label)gvASH.Rows[i].Cells[0].FindControl("lblCFID"); if (cb.Checked == true) { string ID = lblID.Text; //Assign Code } } } 

我在字符串ID = lblID.Text上设置断点; 但它永远不会发现任何被检查的东西。

我认为你缺少的是,当你点击按钮并且你的页面是回发时,你重新绑定到gridview,你需要在这种情况下绑定

  if (!Page.IsPostBack) { GridView1.DataSourceID = "yourDatasourceID"; GridView1.DataBind(); } 

在回发上,GridView的内容是从page_init和page_load之间的回发Viewstate数据重新创建的。 也许尝试在page_load中检查你的Gridview,看看有什么。

设置Checkbox的autopostback属性

 AutoPostBack="true"