选中CheckBox时如何从GridView获取CheckBox值

时间:2016-04-05 17:46:22

标签: c# asp.net gridview

我自动将GridView填充为

<asp:GridView ID="gvValues" runat="server" 
    OnRowDataBound="gvValues_RowDataBound" 
    OnPageIndexChanging="gvValues_PageIndexChanging" 
    <Columns>           
        <asp:TemplateField HeaderText="#">
            <ItemTemplate>
                <%# gvValues.PageSize*gvValues.PageIndex+ Container.DisplayIndex+1  %> 
                <asp:CheckBox ID="chkProduct" runat="server" CssClass="chkProduct"/>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField  HeaderText="online" meta:resourcekey="Online">
            <ItemTemplate > 
                <asp:CheckBox ID="chkProductonline" runat="server"  OnCheckedChanged ="chkProductonline_CheckedChanged" AutoPostBack="true"/>
            </ItemTemplate>
        </asp:TemplateField>

我需要的是点击chkProductonline复选框,触发事件并获取chkProductonlinechkProducton值。我试过这个,但它总是让我无效。

protected void chkProductonline_CheckedChanged(object sender, EventArgs e)
{
    var chkProductonline = FindControl("chkProductonline") as CheckBox;
    // bool ischeck = chkProductonline.Checked;

    var chkProduct = gvValues.FindControl("chkProduct") as CheckBox;
}

我无法循环GridView。我需要一个接一个地做这件事。还有另一种方法吗?

2 个答案:

答案 0 :(得分:1)

你可以试试这个:

protected void chkProductonline_CheckedChanged(object sender, EventArgs e)
{
    CheckBox chkProductonline = sender as CheckBox;
    ...

    CheckBox chkProduct = chkProductionLine.NamingContainer.FindControl("chkProduct") as CheckBox;
    ...
}

答案 1 :(得分:0)

您需要在特定行上调用FindControl。您将无法在整个GridView上调用它,因为存在重复内容(即多个chkProductionlines和chkProducts)。一行知道复选框,而不是其他复选框。

所以你可以做的是首先得到调用事件的CheckBox(你的发件人参数,chkProductionline)并使用它的NamingContainer。由于它包含在GridView行中,因此请使用它来查找您可能需要的其他控件。

protected void chkProductonline_CheckedChanged(object sender, EventArgs e)
{
    CheckBox chkProductionline = (CheckBox)sender;
    GridViewRow row = (GridViewRow)chkProductionline.NamingContainer;

    CheckBox chkProduct = (CheckBox)row.FindControl("chkProduct");
}