我自动将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
复选框,触发事件并获取chkProductonline
和chkProducton
值。我试过这个,但它总是让我无效。
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。我需要一个接一个地做这件事。还有另一种方法吗?
答案 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");
}