无法获取更新面板中 GridView 的复选框值

Not able to fetch Check Box value of GridView which is in Update Panel

我有一个如下所述的 GridView

 <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
            <asp:GridView ID="gvResult" runat="server" AutoGenerateColumns="false">
                <Columns>
                    <asp:TemplateField>
                        <HeaderTemplate>
                            <asp:CheckBox ID="chkAll" runat="server" onclick="checkAll(this);" />
                            Remove Lists
                        </HeaderTemplate>
                        <ItemTemplate>
                            <asp:CheckBox ID="chk" runat="server" onclick="Check_Click(this)" />
                        </ItemTemplate>
                        <ItemStyle HorizontalAlign="Center" />
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>
        </ContentTemplate>
    </asp:UpdatePanel>

当我尝试获取按钮上复选框的值时,单击它总是 return false 即使选中了复选框

下面是我的按钮点击事件

 protected void btnDeleteLists_Click(object sender, EventArgs e)
   {
       string str = string.Empty;

       foreach (GridViewRow gvrow in gvResult.Rows)
       {
           CheckBox chk = (CheckBox)gvrow.FindControl("chk");
           if (chk != null & chk.Checked)
           {
               //Some Code                 
           }
       }       
   }

页面加载事件

 protected void Page_Load(object sender, EventArgs e)
   {
       cmdSearch.Text = "Search " + rbSearch.SelectedValue;
       if (SessionUtilities.Current_UserType != "3")
       {
           gvResult.Columns[gvResult.Columns.Count - 3].Visible = false;
       }
       try
       {
           if (Request.QueryString["ListType"].ToString().Trim() == "SL") ListType = 2;
           if (Request.QueryString["ListType"].ToString().Trim() == "DSL") ListType = 3;
       }
       catch { }

       if (ListType == 2) ListTypeString = "Suppression";
       if (ListType == 3) ListTypeString = "Default Suppression";
       SessionUtilities.SetTabHeadingDesc("List", ListTypeString + " List Summary", "View summary of your created lists");
       this.Title = "(View List) " + System.Configuration.ConfigurationManager.AppSettings["Page_Title"].ToString();
       //if (!IsPostBack && !Is)
       //{
       BindResultGridView();

       //}

       newDt = GetAllLists();
   }

所以我哪里错了?

您可能应该使用 gridview 的 prerender 事件或 rowdatabound 事件来获取更新面板中的复选框值

而不是 //if (!IsPostBack && !Is) //{ BindResultGridView(); //} 只需使用 if (!IsPostBack) { BindResultGridView(); } 即可。

说明:- 如果您在页面处于回发阶段时在页面加载中再次绑定 gridview,它将丢失您上次所做的更改。它将重新初始化整个gridview,因此您的代码将无法工作。