返回Gridview Checkbox布尔值

时间:2013-03-03 14:12:00

标签: 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。

2 个答案:

答案 0 :(得分:3)

始终取消选中复选框可能是DataBinding的问题。在调用按钮单击事件之前,请确保不是GridView的DataBinding。有时人们会在Page_load事件上粘贴DataBinding,然后在每个PostBack上保留DataBinding。在点击按钮之前调用它可以直接影响。 当GridView是DataBound时,您将丢失来自页面的所有状态。

如果您在GridView上对Page_load进行数据绑定,请将其换行验证!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
            }
        }
    }
}

浏览器会将Checked的{​​{1}}值作为值CheckBox发送。如果未在浏览器中检查,则请求中没有任何内容。

答案 1 :(得分:1)

你可以使用像这样的数据键

来实现它

将Datakey添加到gridview

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

并像这样获得服务器端

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