C# 在嵌套的gridview中使用复选框进行操作
这是GridView的设计C# 在嵌套的gridview中使用复选框进行操作,c#,asp.net,gridview,checkbox,nested,C#,Asp.net,Gridview,Checkbox,Nested,这是GridView的设计 <asp:GridView ID="gmainrole" runat="server" OnRowDataBound="gmainrole_RowDataBound"> <Columns> <asp:TemplateField> <ItemTemplate> <input type="checkbox" id="chkavail" ru
<asp:GridView ID="gmainrole" runat="server" OnRowDataBound="gmainrole_RowDataBound">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<input type="checkbox" id="chkavail" runat="server" checked='<%#Eval("checkstatus") %>' />
<asp:Literal ID="litstate" runat="server" Text='<%#Eval("areaname") %>'></asp:Literal>
<asp:Literal ID="lituserrole" runat="server" Text='<%#Eval("nid") %>' Visible="false"></asp:Literal>
<asp:GridView ID="subrole" runat="server" AutoGenerateColumns="false" OnRowDataBound="subrole_RowDataBound">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox ID="chk1vail" runat="server" Checked='<%#Eval("checkstatus") %>' />
<asp:Literal ID="litstate" runat="server" Text='<%#Eval("areaname") %>'></asp:Literal>
<asp:Literal ID="lituserrole" runat="server" Text='<%#Eval("nid") %>' Visible="false"></asp:Literal>
<asp:DataList ID="glastrole" runat="server" GridLines="None" AutoGenerateColumns="false" OnItemDataBound="glastrole_ItemDataBound">
<ItemTemplate>
<div>
<asp:CheckBoxList runat="server" ID="chklastrole">
</asp:CheckBoxList>
<asp:Literal ID="Literal1" runat="server" Text='<%#Eval("areaname") %>'></asp:Literal>
<asp:Literal ID="litlast" runat="server" Text='<%#Eval("nid") %>' Visible="false"></asp:Literal>
<asp:DataList ID="ecounter" runat="server" GridLines="None" AutoGenerateColumns="false">
<ItemTemplate>
<asp:CheckBoxList runat="server" ID="chklastrole">
</asp:CheckBoxList>
<asp:Literal ID="Literal11" runat="server" Text='<%#Eval("areaname") %>'></asp:Literal>
<asp:Literal ID="litlast1" runat="server" Text='<%#Eval("nid") %>' Visible="false"></asp:Literal>
</ItemTemplate>
</asp:DataList>
</div>
</ItemTemplate>
</asp:DataList>
</table>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</td>
</tr>
</table>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
此GridView是一个四层嵌套的GridView,其中下两层是数据列表,上两层是GridView。我希望当用户选中第二个GridView中名为
subrole
(级别2)的复选框时,DataListglastrole
(级别3)和DataListecounter
(级别4)中的所有后续复选框都会选中该特定级别2复选框。我会给你的代码,我一直尝试到现在,但事实是我甚至不知道如何处理这个问题。请帮忙 试试这个可以解决你的问题:
添加OnCheckedChanged属性
隐藏代码以查找控件:
protected void Checked_Changed(object sender, EventArgs e)
{
// gets a row from GridView
GridViewRow subrole_row = ((CheckBox)sender).Parent as GridViewRow;
// get GridView
GridView subrole = subrole_row.Parent as GridView;
// find the datalist in GridView
DataList glastrole = subrole.Rows[subrole_row.RowIndex].FindControl("glastrole") as DataList;
glastrole.DataSource = glastrole_dt; // set your data to datalist
glastrole.DataBind(); // bind datalist
subrole.DataSource = subrole_dt; // set your data to gridview
subrole.DataBind(); // bind gridview
}
protected void glastrole_ItemDataBound(object sender, DataListItemEventArgs e)
{
if ((e.Item.ItemType == ListItemType.Item) || (e.Item.ItemType == ListItemType.AlternatingItem))
{
GridViewRow subrole_row = ((DataList)sender).Parent as GridViewRow;
CheckBox chk1vail = subrole_row.FindControl("chk1vail") as CheckBox;
// find CheckBoxList in glastrole
CheckBoxList chklastrole = e.Item.FindControl("chklastrole") as CheckBoxList;
// find if checkbox is checked
if (chk1vail.Checked)
{
// here you can check all the CheckBoxList items
foreach (ListItem item in chklastrole.Items)
{
item.Selected = true;
}
}
// find DataList in glastrole
DataList ecounter = e.Item.FindControl("ecounter") as DataList;
ecounter.DataSource = ecounter_dt; // set your data to datalist
ecounter.DataBind(); // bind datalist
}
}
protected void ecounter_ItemDataBound(object sender, DataListItemEventArgs e)
{
if ((e.Item.ItemType == ListItemType.Item) || (e.Item.ItemType == ListItemType.AlternatingItem))
{
DataList glastrole = ((DataList)sender).Parent as DataList;
DataList ecounter = glastrole.Parent as DataList;
GridViewRow subrole_row = ecounter.Parent as GridViewRow;
CheckBox chk1vail = subrole_row.FindControl("chk1vail") as CheckBox;
// find CheckBoxList in glastrole
CheckBoxList chklastrole = e.Item.FindControl("chklastrole") as CheckBoxList;
// find if checkbox is checked
if (chk1vail.Checked)
{
// here you can check all the CheckBoxList items
foreach (ListItem item in chklastrole.Items)
{
item.Selected = true;
}
}
}
}