我有以下代码......
<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是否强制程序员对每个控件的每个事件进行编码,即使某些控件是由父代码管理的?
谢谢
答案 0 :(得分: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
这将以与单击原始复选框完全相同的方式发送对象。