Added new kb article treelist-expand-nodes-programmatically (#2452)

* Added new kb article treelist-expand-nodes-programmatically

* kb(TreeList): article and example polish

---------

Co-authored-by: KB Bot <kb-bot@telerik.com>
Co-authored-by: Tsvetomir Hristov <106250052+Tsvetomir-Hr@users.noreply.github.com>
This commit is contained in:
Kendo Bot 2024-10-29 17:15:12 +02:00 коммит произвёл GitHub
Родитель d39ffb5e2b
Коммит a052a987e4
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: B5690EEEBB952194
1 изменённых файлов: 185 добавлений и 0 удалений

Просмотреть файл

@ -0,0 +1,185 @@
---
title: How to Programmatically Expand or Collapse TreeList Nodes
description: Learn how to programmatically expand or collapse nodes in a Telerik TreeList for Blazor by utilizing the TreeList state management.
type: how-to
page_title: How to Programmatically Expand or Collapse TreeList Nodes
slug: treelist-kb-expand-nodes-programmatically
tags: treelist, expand, collapse
res_type: kb
ticketid: 1663716, 1649445, 1548181
---
## Environment
<table>
<tbody>
<tr>
<td>Product</td>
<td>TreeList for Blazor</td>
</tr>
</tbody>
</table>
## Description
In the Telerik TreeList for Blazor, I load the TreeList in a collapsed mode. I need to programmatically expand and collapse TreeList nodes.
This KB article also answers the following questions:
- How can I control the expanded state of TreeList nodes in code?
- Is it possible to expand a TreeList nodes without user interaction?
- What approach should I take to programmatically adjust the visibility of TreeList nodes?
## Solution
To control the expanded or collapsed state of items in the TreeList programmatically, utilize the TreeList State. The state management feature allows for the adjustment of item visibility through code.
Below is an example demonstrating how to use the TreeList State to expand or collapse items programmatically:
````CSHTML
<div>
<span>
<TelerikButton OnClick="@SetTreeListExpandedItems">Expand/Collapse All Items</TelerikButton>
</span>
</div>
<br />
<TelerikTreeList @ref="TreeListRef"
Data="@Data"
ItemsField="@(nameof(Employee.DirectReports))"
OnStateInit="((TreeListStateEventArgs<Employee> args) => OnStateInitHandler(args))"
Reorderable="true"
Resizable="true"
Sortable="true"
FilterMode="@TreeListFilterMode.FilterRow"
Pageable="true"
Width="850px">
<TreeListColumns>
<TreeListColumn Field="@nameof(Employee.Name)" Expandable="true" Width="320px" />
<TreeListColumn Field="@nameof(Employee.EmailAddress)" Width="220px" />
<TreeListColumn Field="@nameof(Employee.HireDate)" Width="220px" />
</TreeListColumns>
</TelerikTreeList>
@code {
private TelerikTreeList<Employee> TreeListRef { get; set; } = new TelerikTreeList<Employee>();
private List<Employee> Data { get; set; }
private int LastId { get; set; } = 1;
private async Task SetTreeListExpandedItems()
{
if (!(TreeListRef.GetState().ExpandedItems.Any()))
{
List<Employee> toExpand = new List<Employee>();
foreach (Employee item in Data)
{
toExpand.Add(item);
if (item.DirectReports.Any())
{
foreach (Employee child in item.DirectReports)
{
toExpand.Add(child);
}
}
}
var expandedState = new TreeListState<Employee>()
{
ExpandedItems = new List<Employee>(toExpand)
};
await TreeListRef.SetStateAsync(expandedState);
}
else
{
var expandedState = new TreeListState<Employee>()
{
ExpandedItems = new List<Employee>()
};
await TreeListRef.SetStateAsync(expandedState);
}
}
private async Task OnStateInitHandler(TreeListStateEventArgs<Employee> args)
{
var collapsedItemsState = new TreeListState<Employee>()
{
//collapse all items in the TreeList upon initialization of the state
ExpandedItems = new List<Employee>()
};
args.TreeListState = collapsedItemsState;
}
protected override async Task OnInitializedAsync()
{
Data = await GetTreeListData();
}
private async Task<List<Employee>> GetTreeListData()
{
List<Employee> data = new List<Employee>();
for (int i = 1; i < 15; i++)
{
Employee root = new Employee
{
Id = LastId,
Name = $"root: {i}",
EmailAddress = $"{i}@example.com",
HireDate = DateTime.Now.AddYears(-i),
DirectReports = new List<Employee>(), // prepare a collection for the child items, will be populated later in the code
};
data.Add(root);
LastId++;
for (int j = 1; j < 4; j++)
{
int currId = LastId;
Employee firstLevelChild = new Employee
{
Id = currId,
Name = $"first level child {j} of {i}",
EmailAddress = $"{currId}@example.com",
HireDate = DateTime.Now.AddDays(-currId),
DirectReports = new List<Employee>(), // collection for child nodes
};
root.DirectReports.Add(firstLevelChild); // populate the parent's collection
LastId++;
for (int k = 1; k < 3; k++)
{
int nestedId = LastId;
// populate the parent's collection
firstLevelChild.DirectReports.Add(new Employee
{
Id = LastId,
Name = $"second level child {k} of {j} and {i}",
EmailAddress = $"{nestedId}@example.com",
HireDate = DateTime.Now.AddMinutes(-nestedId)
}); ;
LastId++;
}
}
}
return await Task.FromResult(data);
}
public class Employee
{
public List<Employee> DirectReports { get; set; }
public int Id { get; set; }
public string Name { get; set; }
public string EmailAddress { get; set; }
public DateTime HireDate { get; set; }
}
}
````
## See Also
- [TreeList State Documentation]({%slug treelist-state%})
- [TreeList Overview]({%slug treelist-overview%})