1

我有以下代码...

<asp:GridView ID="gvStudents" runat="server" DataSourceID="SqlDataSourceStudents" AutoGenerateColumns="False" Width="100%" OnRowDataBound="gvStudents_RowDataBound">
    <HeaderStyle BackColor="#5D7B9D" ForeColor="White" />
    <AlternatingRowStyle BackColor="#EEEEEE" />
    <RowStyle BackColor="White" />
    <Columns>
        <asp:TemplateField HeaderText="Student" ControlStyle-Width="120px" >
            <ItemTemplate>
                <asp:Label ID="lblName" runat="server" Text='<%# Eval("StudentName") %>' ToolTip='<%# Eval("ProgramName") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Mobile" ControlStyle-Width="70px" ItemStyle-HorizontalAlign="Center" >
            <ItemTemplate>
                <asp:Label ID="lblMobile" runat="server" Text='<%# Eval("StudentMobilePhone") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Next Of Kin" HeaderStyle-HorizontalAlign ="Center" ItemStyle-HorizontalAlign ="Left" >
            <ItemTemplate>
                <asp:GridView ID="gvNOKs" runat="server" AutoGenerateColumns="False" BorderStyle="None" GridLines="Vertical" ShowHeader="false" ShowFooter="false" >
                    <Columns>
                        <asp:TemplateField HeaderText="Given Name" ControlStyle-Width="150px" >
                            <ItemTemplate>
                                <asp:Label ID="lblNOKGivenName" runat="server" Text='<%# Bind("NOKname") %>'></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="NoK Type" ItemStyle-HorizontalAlign="Center" ControlStyle-Width="100px" >
                            <ItemTemplate>
                                <asp:Label ID="lblNOKType" runat="server" Text='<%# Bind("NOKType") %>'></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Mobile" ControlStyle-Width="100px" ItemStyle-HorizontalAlign="Center" >
                            <ItemTemplate>
                                <asp:Label ID="lblNOKMobile" runat="server" Text='<%# Bind("NOKMobile") %>'></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField>
                            <ItemTemplate>
                                <asp:CheckBox ID="cbNOKAdd" runat="server" />
                            </ItemTemplate>
                            <ItemStyle HorizontalAlign="Center" />
                        </asp:TemplateField>
                   </Columns>
                </asp:GridView>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField>
            <HeaderTemplate>
                <asp:CheckBox id="CheckBoxAll" runat="server" OnCheckedChanged="CheckBoxAll_OnCheckedChanged" AutoPostBack="true" />
            </HeaderTemplate>
            <ItemTemplate>
                <asp:CheckBox ID="CheckBoxAdd" runat="server" OnCheckedChanged="CheckBoxAdd_OnCheckedChanged" AutoPostBack="true" />
            </ItemTemplate>
            <ItemStyle HorizontalAlign="Center" />
        </asp:TemplateField>
    </Columns>
</asp:GridView>

问题是,当我切换“CheckBoxAll”复选框时,我背后有一个 C# 代码 (CheckBoxAll_OnCheckedChanged),它必须遍历所有“CheckBoxAdd”复选框并切换它们以匹配主复选框。这很好用。

但是没有发生的是嵌套的gridview“cbNOKAdd”复选框也没有被切换。我希望它们也会发生变化,因为 CheckBoxAdd_OnCheckedChanged() 过程中的代码会为您做到这一点。

换句话说,单独运行 CheckBoxAll_OnCheckedChanged() 并切换“CheckBoxAdd”复选框,不会切换嵌套的 gridview 复选框。

ASP.net 是否强制程序员编写每个控件的每个事件,即使某些控件由父代码管理?

谢谢

4

1 回答 1

1

当您第一次运行时,CheckBoxAll_OnCheckedChanged您将运行每个复选框并将其更改Checked为 True 或 False,具体取决于CheckBoxAll已勾选的内容。

不会导致每个正在运行的复选框的回发。

相反,在遍历嵌套的 gridview 时,您可以CheckBoxAdd_OnCheckedChanged通过将对象和相同的 eventargs 传递给它来调用 sub。

例如:

Sub CheckBoxAll_OnCheckedChanged(sender as object, e as eventargs)
    'Loop through gridview here
    'When finding the control CheckBoxAdd just call
     For each gvRow as GridviewRow in gvStudents.Rows
         dim CheckBoxAdd as Checkbox = gvRow.FindControl("CheckBoxAdd")
         CheckBoxAdd.Checked = True 'Or false dependent on CheckBoxAll
         CheckBoxAll_OnCheckedChanged(CheckBoxAdd, e)
     Next
End Sub

这将以与单击复选框最初相同的方式发送对象。

于 2013-07-18T10:46:33.460 回答