返回Gridview复选框boolean

本文关键字:boolean 复选框 Gridview 返回 | 更新日期: 2023-09-27 18:02:12

我绞尽脑汁试图访问gridview的ID列,其中用户选择了一个复选框:

<asp:GridView ID="gvUserFiles" runat="server">
            <Columns>
            <asp:TemplateField HeaderText="Select" ItemStyle-HorizontalAlign="Center" >
                <ItemTemplate>
                    <asp:CheckBox  ID="chkSelect" runat="server" />
                </ItemTemplate>
            </asp:TemplateField>
            </Columns>
        </asp:GridView>

gridview列是chkSelect(复选框),Id, fileName, CreateDate

当用户选中复选框并按下按钮时,我想接收"id"列值。

下面是我的按钮代码:
foreach (GridViewRow row in gvUserFiles.Rows)
            {
                var test1 = row.Cells[0].FindControl("chkSelect");
                CheckBox cb = (CheckBox)(row.Cells[0].FindControl("chkSelect"));
                //chk = (CheckBox)(rowItem.Cells[0].FindControl("chk1"));  
                if (cb != null && cb.Checked)
                {
                    bool test = true;
                }
            }

cb。Checked总是返回false

返回Gridview复选框boolean

总是未选中复选框可能是数据绑定的问题。请确保在调用按钮单击事件之前没有绑定GridView。有时人们会在Page_load事件上绑定数据绑定,然后在每个PostBack事件上保持数据绑定。由于它是在按钮点击之前调用的,所以它可以产生直接影响。当GridView被绑定时,您将丢失来自该页的所有状态。

如果你在Page_load上绑定GridView,包装它来验证!IsPostBack:

if (!IsPostBack)
{
    gvUserFiles.DataSource = data;
    gvUserFiles.DataBind();
}

如果这不是你的情况,你可以尝试根据Request.Form的值验证被检查的属性:

protected void button_OnClick(object sender, EventArgs e)
{
    foreach (GridViewRow row in gvUserFiles.Rows)
    {
        CheckBox cb = (CheckBox)row.FindControl("chkSelect");
        if (cb != null)
        {
            bool ckbChecked = Request.Form[cb.UniqueID] == "on";
            if (ckbChecked)
            {
                //do stuff
            }
        }
    }
}

CheckBoxChecked值被浏览器发送为"on"值。如果没有在浏览器中选中它,那么请求上就没有任何内容。

您可以使用这样的datakey来实现

Add Datakey to your gridview

<asp:GridView ID="gvUserFiles" runat="server" DataKeyNames="Id">

并像这样在服务器端获取

string value = Convert.ToString(this.gvUserFiles.DataKeys[rowIndex]["Id"]);