c# - 返回 Gridview 复选框 bool 值

标签 c# asp.net gridview

我绞尽脑汁试图访问用户选择复选框的 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。

最佳答案

复选框总是未选中可能是 DataBinding 的问题。在调用按钮单击事件之前,请确保您没有对 GridView 进行数据绑定(bind)。有时人们将 DataBinding 粘贴到 Page_load 事件上,然后它在每个 PostBack 上保留 DataBinding。由于在按钮点击前被调用,所以可以起到直接的作用。 当 GridView 是 DataBound 时,您将失去来自页面的所有状态。

如果您在 Page_load 上对 GridView 进行数据绑定(bind),将其包装以验证 !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" 发送。如果未在浏览器中选中,则请求不会执行任何操作。

关于c# - 返回 Gridview 复选框 bool 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15186546/

相关文章:

c# - @ 符号在 C# aspx 中无效

c# - 在 Xamarin ListView 中将图像调整为行高

asp.net - asp.net中如何避免对数据库进行过多的查询?

c# - 将 ASP.NET 2.0 GridView 绑定(bind)到我自己的 IList<T>.SomeMemberOfMyOwnCustomType.SomeProperty

c# 同时在 cmd.exe 中运行多个命令并将输出写入文本文件

C# - (int)Math.Round((double)(3514 + 3515)/2) =3514?

c# - ffmpeg c# asp.net help on ProcessStartInfo

c# - 在 ASP.NET MVC Core 中使用枚举作为下拉列表

c# - gridview 更新时确认消息

c# - 通过mySql源从gridview中删除