C# 子网格复选框选中未选中时未激发的事件
我在父网格和子网格中有一个嵌套网格和复选框。在父网格标题处有一个主复选框,用于选择所有数据。然后,对父行有另一个复选框,对每个子行有第三个复选框。 前两个复选框和事件工作正常。 问题在于子网格复选框。当我选中复选框时,事件将按预期触发。但是当复选框未选中时,事件不会被触发。相反,它只是发回。 代码如下C# 子网格复选框选中未选中时未激发的事件,c#,asp.net,C#,Asp.net,我在父网格和子网格中有一个嵌套网格和复选框。在父网格标题处有一个主复选框,用于选择所有数据。然后,对父行有另一个复选框,对每个子行有第三个复选框。 前两个复选框和事件工作正常。 问题在于子网格复选框。当我选中复选框时,事件将按预期触发。但是当复选框未选中时,事件不会被触发。相反,它只是发回。 代码如下 <asp:GridView ID="grdmaster" runat="server" SkinID="GridView" AutoGenerateColumns="false" Data
<asp:GridView ID="grdmaster" runat="server" SkinID="GridView" AutoGenerateColumns="false" DataKeyNames="ProjectNo" HorizontalAlign="Center" HeaderStyle-Height="35px" OnRowDataBound ="grdmaster_RowDataBound" >
<Columns>
<asp:TemplateField HeaderText="View Forging">
<ItemTemplate>
<img alt="" style="cursor: pointer" src="images/plus1.png" />
<asp:Panel ID="pnlforginfo" runat="server" Style="display: none">
<asp:GridView ID ="gvforgmst" runat="server" AutoGenerateColumns="false" CssClass="ChildGrid" ShowHeaderWhenEmpty="true" EmptyDataText="No Data Found" SkinID="GridView">
<Columns>
<asp:BoundField ItemStyle-Width="150px" DataField="ForgingNo" HeaderText="Forging No" />
<asp:BoundField ItemStyle-Width="150px" DataField="ProductType" HeaderText="Product" />
<asp:TemplateField ControlStyle-Height="35px">
<ItemTemplate>
<asp:CheckBox ID="chkviewforg" runat="server" AutoPostBack ="true" OnCheckedChanged="chkviewforg_CheckedChanged" ViewStateMode="Enabled" EnableViewState="True" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</asp:Panel>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField HeaderText="ProjectNo" DataField="ProjectNo" />
<asp:BoundField HeaderText="CustomerName" DataField="CustomerName" />
<asp:BoundField HeaderText="GradCode" DataField="GradCode" />
<asp:TemplateField ControlStyle-Height="35px">
<HeaderTemplate>
<asp:CheckBox ID="chkAll" runat="server"
AutoPostBack="true" OnCheckedChanged="chkAll_CheckedChanged" />
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox ID="chk" runat="server"
AutoPostBack="true" OnCheckedChanged="chk_CheckedChanged" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
protected void chkviewforg_CheckedChanged(object sender, EventArgs e)
{
int cnt = 0;
CheckBox chkAll = (CheckBox)grdmaster.HeaderRow.Cells[4].FindControl("chkAll");
for (int i = 0; i < grdmaster.Rows.Count; i++)
{
GridView gvforgmst = (GridView)grdmaster.Rows[i].FindControl("gvforgmst");
CheckBox chk = (CheckBox)grdmaster.Rows[i]
.Cells[4].FindControl("chk");
foreach (GridViewRow gr in gvforgmst.Rows)
{
CheckBox chkviewforg = ((CheckBox)gr.FindControl("chkviewforg"));
if (chkviewforg.Checked)
{
cnt++;
}
}
if (gvforgmst.Rows.Count > 0)
{
if (cnt == gvforgmst.Rows.Count)
{
chk.Checked = true;
}
else
{
chk.Checked = false;
chkAll.Checked = false;
}
}
}
}
受保护的void chkviewforg_CheckedChanged(对象发送方,事件参数e)
{
int-cnt=0;
复选框chkAll=(复选框)grdmaster.HeaderRow.Cells[4].FindControl(“chkAll”);
对于(int i=0;i0)
{
if(cnt==gvforgmst.Rows.Count)
{
chk.Checked=真;
}
其他的
{
chk.Checked=假;
chkAll.Checked=假;
}
}
}
}
您可以尝试在ItemDataBound处提供OnCheckedChanged处理程序吗?我没有使用ItemDataBound事件。你能解释一下怎么做吗?