Generally, we require nested structure of grid to display hierarchical data or Master Child data. Here it is done using gridview nested in repeater.

In aspx Page:

<asp:Repeater ID="rpt" runat="server" 
            onitemdatabound="rpt_ItemDataBound">
        <ItemTemplate>
            <asp:GridView ID="Grd" runat="server">            
            </asp:GridView>
        </ItemTemplate> 
    </asp:Repeater>   

In .CS Page:


protected void Page_Load(object sender, EventArgs e)
    {
  rpt.DataSource = GetData();
        rpt.DataBind();    
    }   

protected void rpt_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            GridView gv = (GridView)e.Item.FindControl("grd");
            if (gv != null)
            {
                DataRowView drv = (DataRowView)e.Item.DataItem;
                gv.DataSource = GetSubData(Convert.ToInt32(drv["ID"]));
                gv.DataBind();            
            }
        }
    }


private DataTable GetData()
    {

        DataTable dt = new DataTable();
        dt.Columns.Add("ID");
        dt.Columns.Add("Name");
        dt.Columns.Add("Size");
        dt.Columns.Add("Enabled");
        for (int i = 0; i < 3; i++)
        {
            for (int j = 0; j < 3; j++)
            {
                DataRow dr = dt.NewRow();
                dr[0] = i.ToString();
                dr[1] = i.ToString() + "-Name-" + j.ToString();
                dr[2] = i.ToString() + "-Size-" + j.ToString();
                dr[3] = Convert.ToBoolean(i % 2);
                dt.Rows.Add(dr);
            }
        }
        return dt;
    }
    protected DataTable GetSubData(int ij)
    {

        DataTable dt = new DataTable();
        dt.Columns.Add("ID");
        dt.Columns.Add("SubName");
        dt.Columns.Add("SubSize");
        dt.Columns.Add("Enabled");
        for (int j = 0; j < 3; j++)
        {
            DataRow dr = dt.NewRow();
            dr[0] = ij.ToString();
            dr[1] = ij.ToString() + "-Name-" + j.ToString();
            dr[2] = ij.ToString() + "-Size-" + j.ToString();
            dr[3] = Convert.ToBoolean(ij % 2);
            dt.Rows.Add(dr);
        }

        return dt;
}

Hope, It Helps.

 

Comments:  0