【问题标题】:Nested gridview checkboxes are not toggling when master gridview checkbox is toggled切换主 gridview 复选框时,嵌套的 gridview 复选框不会切换
【发布时间】:2013-07-12 20:39:03
【问题描述】:

我有以下代码...

<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 是否强制程序员编写每个控件的每个事件,即使某些控件由父代码管理?

谢谢

【问题讨论】:

    标签: asp.net gridview checkbox nested


    【解决方案1】:

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

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

    相反,在遍历嵌套的 gridview 时,您可以通过将对象和相同的 eventargs 传递给它来调用 CheckBoxAdd_OnCheckedChanged 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
    

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

    【讨论】:

    • 是这样想的。谢谢
    猜你喜欢
    • 2014-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-31
    • 1970-01-01
    • 2017-01-03
    • 1970-01-01
    相关资源
    最近更新 更多