My example is using Entity Framework as it's data source. The requirement is that I have a Parent grid with high level details and a child grid with more details. In order to have the usability that I desire the user will click on a link in the child and navigate off of the page and it's position on the parent grid is retained. The desired behavior is that when the user returns to the page the previous Configuration should be retained. I have tried several examples that I have found in the forums but none of them seem to work.
protected void rgCampaignGrid_ItemDataBound(object sender, GridItemEventArgs e)
{
List<int> reviewedCampaigns = new List<int>();
if (Session.Contents["ReviewedCampaigns"] != null)
{
reviewedCampaigns = (List<int>)Session.Contents["ReviewedCampaigns"];
}
if (e.Item is GridDataItem)
{
RadGrid parent = (RadGrid)sender;
GridDataItem item = (GridDataItem)e.Item;
int campaignId = Convert.ToInt32(item.GetDataKeyValue("CampaignId"));
CampaignId = campaignId;
if(reviewedCampaigns.Contains(campaignId))
{
e.Item.Expanded = true;
}
if (!reviewedCampaigns.Contains(CampaignId))
{
((HyperLink)item["ApproveColumn"].FindControl("hkApprove")).Attributes.Add("onclick", "return CheckApprove('" + campaignId.ToString() + "');");
((HyperLink)item["ApproveColumn"].FindControl("hkApprove")).CssClass = string.Empty;
((HyperLink)item["DenyColumn"].FindControl("hkDeny")).Attributes.Add("onclick", "return CheckDeny('" + campaignId.ToString() + "');");
((HyperLink)item["DenyColumn"].FindControl("hkDeny")).CssClass = string.Empty;
}
else
{
((HyperLink)item["ApproveColumn"].FindControl("hkApprove")).CssClass = "launchsubmit";
((HyperLink)item["ApproveColumn"].FindControl("hkApprove")).Attributes.Remove("onclick");
((HyperLink)item["DenyColumn"].FindControl("hkDeny")).CssClass = "launchsubmit";
((HyperLink)item["DenyColumn"].FindControl("hkDeny")).Attributes.Remove("onclick");
}
}
if (e.Item is GridNestedViewItem)
{
GridNestedViewItem nestedView = (GridNestedViewItem)e.Item;
if (reviewedCampaigns.Contains(CampaignId) && nestedView != null)
{
((Panel)nestedView.FindControl("InnerContainer")).Visible = true;
}
}
}
protected void RgCampaignGrid_ItemCommand(object sender, GridCommandEventArgs e)
{
UCampaign.ApprovalsClass cls = new ApprovalsClass(CurrentUserSession.ClientId, CurrentUserSession.CampaignUserProfile.CampaignUserId);
RadGrid g = (RadGrid)sender;
CampaignId = Convert.ToInt32(g.MasterTableView.DataKeyValues[e.Item.ItemIndex]["CampaignId"]);
GridDataItem item = (GridDataItem)e.Item;
GridNestedViewItem nestedView = (GridNestedViewItem)item.ChildItem;
Panel pnl = (Panel)nestedView.FindControl("InnerContainer");
pnl.Visible = !e.Item.Expanded;
RadGrid eventRadGrid = (RadGrid)pnl.FindControl("rgEvents");
cls.PopulateEventsGrid(ref eventRadGrid, CampaignId);
List<int> reviewedCampaigns = new List<int>();
if (Session.Contents["ReviewedCampaigns"] != null)
{
reviewedCampaigns = (List<int>)Session.Contents["ReviewedCampaigns"];
if (!reviewedCampaigns.Contains(CampaignId))
{
reviewedCampaigns.Add(CampaignId);
Session.Contents["ReviewedCampaigns"] = reviewedCampaigns;
}
}
else
{
reviewedCampaigns.Add(CampaignId);
Session.Add("ReviewedCampaigns", reviewedCampaigns);
}
}
protected void RgCampaignGrid_PreRender(object sender, EventArgs e)
{
List<int> reviewedCampaigns = new List<int>();
if (Session.Contents["ReviewedCampaigns"] != null)
{
reviewedCampaigns = (List<int>)Session.Contents["ReviewedCampaigns"];
}
RadGrid radGrid1 = (RadGrid)sender;
GridItem[] nestedViewItems = radGrid1.MasterTableView.GetItems(GridItemType.NestedView);
foreach (GridNestedViewItem nestedViewItem in nestedViewItems)
{
VwCampaignsReadyForApproval approval = (VwCampaignsReadyForApproval)nestedViewItem.DataItem;
if (approval != null && reviewedCampaigns.Contains(Convert.ToInt32(approval.CampaignId)))
{
Panel pnl = (Panel)nestedViewItem.FindControl("InnerContainer");
if (pnl != null)
{
pnl.Visible = true;
}
}
}
}
protected void rgCampaignGrid_ItemDataBound(object sender, GridItemEventArgs e)
{
List<int> reviewedCampaigns = new List<int>();
if (Session.Contents["ReviewedCampaigns"] != null)
{
reviewedCampaigns = (List<int>)Session.Contents["ReviewedCampaigns"];
}
if (e.Item is GridDataItem)
{
RadGrid parent = (RadGrid)sender;
GridDataItem item = (GridDataItem)e.Item;
int campaignId = Convert.ToInt32(item.GetDataKeyValue("CampaignId"));
CampaignId = campaignId;
if(reviewedCampaigns.Contains(campaignId))
{
e.Item.Expanded = true;
}
if (!reviewedCampaigns.Contains(CampaignId))
{
((HyperLink)item["ApproveColumn"].FindControl("hkApprove")).Attributes.Add("onclick", "return CheckApprove('" + campaignId.ToString() + "');");
((HyperLink)item["ApproveColumn"].FindControl("hkApprove")).CssClass = string.Empty;
((HyperLink)item["DenyColumn"].FindControl("hkDeny")).Attributes.Add("onclick", "return CheckDeny('" + campaignId.ToString() + "');");
((HyperLink)item["DenyColumn"].FindControl("hkDeny")).CssClass = string.Empty;
}
else
{
((HyperLink)item["ApproveColumn"].FindControl("hkApprove")).CssClass = "launchsubmit";
((HyperLink)item["ApproveColumn"].FindControl("hkApprove")).Attributes.Remove("onclick");
((HyperLink)item["DenyColumn"].FindControl("hkDeny")).CssClass = "launchsubmit";
((HyperLink)item["DenyColumn"].FindControl("hkDeny")).Attributes.Remove("onclick");
}
}
if (e.Item is GridNestedViewItem)
{
GridNestedViewItem nestedView = (GridNestedViewItem)e.Item;
if (reviewedCampaigns.Contains(CampaignId) && nestedView != null)
{
((Panel)nestedView.FindControl("InnerContainer")).Visible = true;
}
}
}
protected void RgCampaignGrid_ItemCommand(object sender, GridCommandEventArgs e)
{
UCampaign.ApprovalsClass cls = new ApprovalsClass(CurrentUserSession.ClientId, CurrentUserSession.CampaignUserProfile.CampaignUserId);
RadGrid g = (RadGrid)sender;
CampaignId = Convert.ToInt32(g.MasterTableView.DataKeyValues[e.Item.ItemIndex]["CampaignId"]);
GridDataItem item = (GridDataItem)e.Item;
GridNestedViewItem nestedView = (GridNestedViewItem)item.ChildItem;
Panel pnl = (Panel)nestedView.FindControl("InnerContainer");
pnl.Visible = !e.Item.Expanded;
RadGrid eventRadGrid = (RadGrid)pnl.FindControl("rgEvents");
cls.PopulateEventsGrid(ref eventRadGrid, CampaignId);
List<int> reviewedCampaigns = new List<int>();
if (Session.Contents["ReviewedCampaigns"] != null)
{
reviewedCampaigns = (List<int>)Session.Contents["ReviewedCampaigns"];
if (!reviewedCampaigns.Contains(CampaignId))
{
reviewedCampaigns.Add(CampaignId);
Session.Contents["ReviewedCampaigns"] = reviewedCampaigns;
}
}
else
{
reviewedCampaigns.Add(CampaignId);
Session.Add("ReviewedCampaigns", reviewedCampaigns);
}
}
protected void RgCampaignGrid_PreRender(object sender, EventArgs e)
{
List<int> reviewedCampaigns = new List<int>();
if (Session.Contents["ReviewedCampaigns"] != null)
{
reviewedCampaigns = (List<int>)Session.Contents["ReviewedCampaigns"];
}
RadGrid radGrid1 = (RadGrid)sender;
GridItem[] nestedViewItems = radGrid1.MasterTableView.GetItems(GridItemType.NestedView);
foreach (GridNestedViewItem nestedViewItem in nestedViewItems)
{
VwCampaignsReadyForApproval approval = (VwCampaignsReadyForApproval)nestedViewItem.DataItem;
if (approval != null && reviewedCampaigns.Contains(Convert.ToInt32(approval.CampaignId)))
{
Panel pnl = (Panel)nestedViewItem.FindControl("InnerContainer");
if (pnl != null)
{
pnl.Visible = true;
}
}
}
}