Hi,
I need to restore the expanded state of a RadTreeList after a redirect. I am storing the expanded items in Session before the redirect. However, server-side expansion only expands the root, not the child items.
Can someone share a JavaScript example or approach to fully expand all previously expanded nodes after a redirect using the stored session data? Or maybe provide a better example on Server Side
Thanks!
This is the example I was using on server side, but it only expands the root element
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using Telerik.Web.UI;
namespace Momentum.Mapp.WebApp.SysMgmt.Groups
{
public partial class GroupMaintenanceServer : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
RadTreeList1.NeedDataSource += RadTreeList1_NeedDataSource;
}
}
protected void RadTreeList1_NeedDataSource(object sender, TreeListNeedDataSourceEventArgs e)
{
RadTreeList1.DataSource = GetData();
}
protected void Page_PreRender(object sender, EventArgs e)
{
var expandedItems = RadTreeList1.Items
.Where(i => i.Expanded)
.Select(i => (int)i.GetDataKeyValue("ID"))
.ToList();
Session["ExpandedNodes"] = expandedItems;
}
protected void RadTreeList1_DataBound(object sender, EventArgs e)
{
if (Session["ExpandedNodes"] is List<int> expanded)
{
foreach (TreeListDataItem item in RadTreeList1.Items)
{
int id = (int)item.GetDataKeyValue("ID");
if (expanded.Contains(id))
item.Expanded = true;
}
}
}
protected void RadTreeList1_ItemCommand(object sender, TreeListCommandEventArgs e)
{
if (e.CommandName == "EditItem" && e.Item is TreeListDataItem dataItem)
{
int id = (int)dataItem.GetDataKeyValue("ID");
Response.Redirect($"EditPage.aspx?id={id}");
}
}
// Ejemplo de datos simples
private DataTable GetData()
{
var dt = new DataTable();
dt.Columns.Add("ID", typeof(int));
dt.Columns.Add("ParentID", typeof(int));
dt.Columns.Add("Name", typeof(string));
dt.Rows.Add(1, DBNull.Value, "Continents");
dt.Rows.Add(2, 1, "Asia");
dt.Rows.Add(3, 1, "Europe");
dt.Rows.Add(4, DBNull.Value, "Oceans");
dt.Rows.Add(5, 4, "Pacific");
dt.Rows.Add(6, 4, "Atlantic");
return dt;
}
}
}