Hi hemma123,
I have created sample code which full-fill your requirement. So please refer the below code and apply same logic in your code.
HTML
<div>
<asp:Label ID="lblvalue" Text="" runat="server" />
<asp:GridView ID="gvParentGrid" runat="server" Width="1550px" DataKeyNames="RegDate"
AutoGenerateColumns="false" OnRowDataBound="gvUserInfo_RowDataBound" GridLines="None"
BorderStyle="Solid" BorderColor="#999999" BorderWidth="2px" Visible="true" ShowHeader="False"
OnSelectedIndexChanged="gvChildGrid_SelectedIndexChanged">
<HeaderStyle CssClass="GridStyleParent" />
<RowStyle BackColor="White" />
<AlternatingRowStyle BackColor="White" />
<Columns>
<asp:TemplateField ItemStyle-Width="20px">
<ItemTemplate>
<img id="imgdiv<%#Eval("RegDate") %>" width="30px" onclick="divexpandcollapse('div<%# Eval("RegDate") %>')"
class="click" border="0" src="images/plus.png" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="RegDate" HeaderText="" HeaderStyle-HorizontalAlign="Left" />
<asp:TemplateField>
<ItemTemplate>
<tr>
<td colspan="100%">
<div id="div<%# Eval("RegDate") %>" style="display: none; position: relative; left: 15px;
overflow: auto">
<asp:GridView ID="gvChildGrid" runat="server" PageSize="2" ForeColor="Black" BorderColor="#999999"
BorderStyle="Solid" BorderWidth="2px" AllowPaging="true" Style="text-align: Left;
position: relative;" AutoGenerateColumns="False" OnSelectedIndexChanged="gvChildGrid_SelectedIndexChanged"
DataKeyNames="RegDate" OnPageIndexChanging="OnChildGrid_PageIndexChanging">
<RowStyle BackColor="White" />
<HeaderStyle CssClass="GridStyleHeader" ForeColor="White" />
<Columns>
<asp:TemplateField HeaderText="No.">
<ItemTemplate>
<%#Container.DataItemIndex + 1%>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField ReadOnly="true" HeaderText="Group" DataField="Group" SortExpression="Group" />
<asp:BoundField ReadOnly="true" HeaderText="Owner" DataField="Owner" SortExpression="Owner" />
</Columns>
</asp:GridView>
</div>
</td>
</tr>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</div>
<div>
<script type="text/javascript">
function divexpandcollapse(divname) {
if(divname!=null)
{
var div = document.getElementById(divname);
var img = document.getElementById('img' + divname);
if (div.style.display == "none") {
div.style.display = "inline";
img.src = "images/minus.png";
localStorage.setItem('divname', divname);
div.style.display = "inline";
}
else {
div.style.display = "none";
img.src = "images/plus.png";
}
}
}
if(<%=Convert.ToString(Page.IsPostBack).ToLower()%>==false)
{
window.onload = divexpandcollapse(null)
}
else
{
window.onload = divexpandcollapse(localStorage.getItem('divname'))
}
</script>
</div>
Vb.net
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
If Not IsPostBack Then
Me.PopulateData()
End If
End Sub
Private Sub PopulateData()
Dim dt As New DataTable()
dt.Columns.Add("RegDate")
dt.Rows.Add("2017-06-06")
dt.Rows.Add("2017-06-05")
dt.Rows.Add("2017-06-03")
dt.Rows.Add("2017-06-02")
gvParentGrid.DataSource = dt
gvParentGrid.DataBind()
End Sub
Protected Sub gvUserInfo_RowDataBound(sender As Object, e As GridViewRowEventArgs)
If e.Row.RowType = DataControlRowType.DataRow Then
Dim gvChildGrid As GridView = TryCast(e.Row.FindControl("gvChildGrid"), GridView)
Dim RegDate As String = gvParentGrid.DataKeys(e.Row.RowIndex).Value.ToString()
Dim parameter As String = "Month or Year"
BindChildGridview(parameter, gvChildGrid)
End If
End Sub
Protected Sub OnChildGrid_PageIndexChanging(sender As Object, e As GridViewPageEventArgs)
Dim gvChildGrid As GridView = DirectCast(sender, GridView)
gvChildGrid.PageIndex = e.NewPageIndex
Dim parameter As String = "Month or Year"
BindChildGridview(parameter, gvChildGrid)
End Sub
Private Sub BindChildGridview(parameter As String, gvChild As GridView)
' Get your data from database and bind your child gridview here.
Dim dt1 As New DataTable()
dt1.Columns.Add("Group")
dt1.Columns.Add("Owner")
dt1.Columns.Add("RegDate")
dt1.Columns.Add("LogMon")
dt1.Rows.Add("A", "Owner", "2017-06-06")
dt1.Rows.Add("B", "Owner", "2017-06-06")
dt1.Rows.Add("c", "Owner", "2017-06-06")
dt1.Rows.Add("d", "Owner", "2017-06-06")
gvChild.DataSource = dt1
gvChild.DataBind()
End Sub
Protected Sub gvChildGrid_SelectedIndexChanged(sender As Object, e As EventArgs)
Dim row As GridViewRow = gvParentGrid.SelectedRow
End Sub
C#
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
this.PopulateData();
}
}
private void PopulateData()
{
DataTable dt = new DataTable();
dt.Columns.Add("RegDate");
dt.Rows.Add("2017-06-06");
dt.Rows.Add("2017-06-05");
dt.Rows.Add("2017-06-03");
dt.Rows.Add("2017-06-02");
gvParentGrid.DataSource = dt;
gvParentGrid.DataBind();
}
protected void gvUserInfo_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
GridView gvChildGrid = e.Row.FindControl("gvChildGrid") as GridView;
string RegDate = gvParentGrid.DataKeys[e.Row.RowIndex].Value.ToString();
string parameter = "Month or Year";
BindChildGridview(parameter, gvChildGrid);
}
}
protected void OnChildGrid_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView gvChildGrid = (GridView)sender;
gvChildGrid.PageIndex = e.NewPageIndex;
string parameter = "Month or Year";
BindChildGridview(parameter, gvChildGrid);
}
private void BindChildGridview(string parameter, GridView gvChild)
{
// Get your data from database and bind your child gridview here.
DataTable dt1 = new DataTable();
dt1.Columns.Add("Group");
dt1.Columns.Add("Owner");
dt1.Columns.Add("RegDate");
dt1.Columns.Add("LogMon");
dt1.Rows.Add("A", "Owner", "2017-06-06");
dt1.Rows.Add("B", "Owner", "2017-06-06");
dt1.Rows.Add("c", "Owner", "2017-06-06");
dt1.Rows.Add("d", "Owner", "2017-06-06");
gvChild.DataSource = dt1;
gvChild.DataBind();
}
protected void gvChildGrid_SelectedIndexChanged(object sender, EventArgs e)
{
GridViewRow row = gvParentGrid.SelectedRow;
}
Screenshot