Nested-GridView
Um Nested-GridView é um controle GridView dentro da linha de grade do controle GridView pai.
Sintaxe
- <asp:GridView ID=“gvParent” runat=“server”></asp:GridView>
- <asp:GridView ID=“gvChild” runat=“server”></asp:GridView>
Parâmetros
| gvParent | É um controle gridview pai que contém um gridview filho como o controle gvChild
e outros controles na linha gridview como Labels, Buttons etc. |
| ——– | ————————————————– ———————– |
| gvCriança | É um controle de gridview filho que também pode conter alguns outros controles como no gridview pai. Ele será aninhado no controle gridview gvParent
. |
O gridview pai pode ser vinculado usando uma função DataBind
simples como gvParent.DataBind();
. E para vincular o gridview filho, você deve vinculá-lo no evento OnRowDataBound
do gridview pai.
Vinculando Nested-GridView com DataSource, por exemplo. Tabela de dados
-
Design do Nested-GridView (Código HTML):
<asp:GridView ID=“gvParent” runat=“server” AutoGenerateColumns=“false” OnRowDataBound=“gvParent_RowDataBound”>
<asp:TemplateField HeaderText=“Parent Column”> </asp:GridView><asp:Label ID=“lblParent” runat=“server” Text=’<% #Bind(“parent”) %>’></asp:Label> <asp:GridView ID=“gvChild” AutoGenerateColumns=“false” runat=“server”> </asp:TemplateField><asp:TemplateField HeaderText=“Child Column”> </asp:GridView><asp:Label ID=“lblChild” runat=“server” Text=’<% #Bind(“child”) %>’></asp:Label> </asp:TemplateField> -
Vinculando GridView pai no evento
Page_Load
:DataTable cgv = new DataTable(); // define temporary a datatable for accessing in rowdatabound event protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { // Create a datatable as a DataSource of your GridViews DataTable dtParent = new DataTable(); // parent gridview datasource DataTable dtChild = new DataTable(); // child gridview datasource
// Add column(s) in datatables and their names and data types dtParent.Columns.Add(new DataColumn("parent", typeof(string))); // parent column dtChild.Columns.Add(new DataColumn("child", typeof(string))); // child column // Add two records in parent datatable for (int i = 0; i < 2; i++) dtParent.Rows.Add("Parent" + i); // Add three records in child datatable for (int i = 0; i < 3; i++) dtChild.Rows.Add("Child" + i); cgv = dtChild; // set child datatable to temprary datatable gvParent.DataSource = dtParent; // set your parent datatable to parent gridview as datasource gvParent.DataBind(); // bind the gridview with datasource }
}
-
Vinculando GridView filho no evento
OrRowDataBound
do GridView pai.protected void gvParent_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { // find all child gridviews from parent GridView gvChild = ((GridView)e.Row.FindControl(“gvChild”));
gvChild.DataSource = cgv; // set your child datatable to parent gridview as datasource gvChild.DataBind(); // bind the gridview with datasource }
}
Depois de vincular Nested-GridView se parece com: