I would like a comopnent similar to this one https://demos.telerik.com/kendo-ui/dropdowntree/index
The goal is to be able to show and select hierarchical data, because the multiselect is flat https://demos.telerik.com/blazor-ui/multiselect/overview
Hi Markus,
I really appreciate your interest in the component.
Due to a shift in priorities, the DropDownTree won’t make it by the end of this year (Q4), as other higher-priority items had to come first.
That said, the component is still on our radar and currently being discussed for Q1 2026. The timeline is still tentative, but this is all the available information for orientation at the moment.
Regards,
Hristian Stefanov
Progress Telerik
Love the Telerik and Kendo UI products and believe more people should try them? Invite a fellow developer to become a Progress customer and each of you can get a $50 Amazon gift voucher.
Hello Hristian,
Could you please provide us with an update on this ticket? It has now been almost a year since its originally expected release, and we rely on this component as it is one of the most highly requested (currently the second highest–rated unplanned ticket). Having clarity on its status is important for us to decide whether we should implement our own solution or wait for its inclusion in the next release.
Thank you in advance for your feedback.
Hi Matthijs,
I'm sorry to hear that the DropDownList alternative you are currently utilizing is not entirely suitable.
I contacted our product manager and the information we can share at the moment for orientation is that the chance of including the DropDownTree component in Q4 this year is very high. The best way to stay updated with what is coming is to keep tracking our Roadmap.
Your interest in this request is highly appreciated.
Regards,
Hristian Stefanov
Progress Telerik
This example helps, but it takes a lot of efforts to get it to work properly. The CSS classes have changed a lot, and there is a bug due to the hard-coded "id" and "for" attributes in the ItemTemplate.
But more importantly the resulting component is far from being as user-friendly as what a real Telerik DropDownTree component would be: the dropdown is not closed automatically when it loses the focus, the focus is not automatically shifted to the treeview when the dropdown opens, using the enter key does not automatically select the focused item and close the dropdown, there is no placeholder value, no clear button, etc. I can probably implement some of that, but it is a lot of work, that needs to be repeated by 57 developers so far.
On top of that, this example is not even what I need, since I am interested in the DropDownTree without the checkboxes, to select only one item. I also need the filtering feature, also a lot of work when it's not a built-in feature.
My alternative for now is to use the DropDownList with the grouping feature. However, the bug I reported makes our users extremely unhappy.
Please consider adding this component soon.
Here is a sample workaround that uses a treeview for the data, adds checkboxes to create item selection (you can also consider adding onclick handlers too - see here), and an animation container to create a dropdown:
<div style="position:relative;">
<span class="k-widget k-dropdown k-header" @onclick="@ToggleDropdown" style="width: 300px;">
<span class="k-dropdown-wrap k-state-default @( DropDownShown ? "k-state-focused" : "" )">
<span class="k-input">@GetSelectedItemsText()</span>
<span class="k-select">
<span class="k-icon k-i-arrow-60-down"></span>
</span>
</span>
</span>
<TelerikAnimationContainer @ref="dropdown" Width="300px" Height="400px" Class="k-popup">
<TelerikTreeView Data="@TreeData">
<TreeViewBindings>
<TreeViewBinding>
<ItemTemplate>
@{
TreeItem itm = context as TreeItem;
<input type="checkbox" id="cb1" class="k-checkbox" @bind="@itm.Selected">
<label class="k-checkbox-label" for="cb1">@itm.Text</label>
}
</ItemTemplate>
</TreeViewBinding>
</TreeViewBindings>
</TelerikTreeView>
</TelerikAnimationContainer>
</div>
@foreach (var item in SelectedItems)
{
<div>@item.Id</div>
}
@code {
// consider exposing these two as parameters and maybe giving them events if you encapsulate this in a standalone component
public IEnumerable<TreeItem> TreeData { get; set; }
public List<TreeItem> SelectedItems { get; set; } = new List<TreeItem>();
private bool DropDownShown { get; set; }
private TelerikAnimationContainer dropdown;
async Task ToggleDropdown()
{
DropDownShown = !DropDownShown;
await dropdown.ToggleAsync();
}
string GetSelectedItemsText()
{
//clean the current selection
SelectedItems = new List<TreeItem>();
//every time the DOM re-renders, we re-calculate the selection
//consider doing this only on an event such as the click handler above
foreach (var item in TreeData)
{
AppendSelectedItems(item);
}
// collect text for the dropdown element. Consider using
// only the first N items for better appearance
string result = string.Join(", ", SelectedItems);
return result;
}
void AppendSelectedItems(TreeItem item)
{
if (item.Selected)
{
SelectedItems.Add(item);
}
foreach (var childItem in item.Items)
{
AppendSelectedItems(childItem);
}
}
// data generation for the treeview
// see more at https://docs.telerik.com/blazor-ui/components/treeview/data-binding/overview
public class TreeItem
{
public string Text { get; set; }
public int Id { get; set; }
public List<TreeItem> Items { get; set; } = new List<TreeItem>();
public bool Expanded { get; set; }
public bool HasChildren { get; set; }
public bool Selected { get; set; }
// in this sample we override ToString to easily show text in the dropdown element
public override string ToString()
{
return this.Text;
}
}
protected override void OnInitialized()
{
LoadHierarchical();
}
private void LoadHierarchical()
{
List<TreeItem> roots = new List<TreeItem>() {
new TreeItem { Text = "Item 1", Id = 1, Expanded = true, HasChildren = true },
new TreeItem { Text = "Item 2", Id = 2, HasChildren = true }
};
roots[0].Items.Add(new TreeItem
{
Text = "Item 1 first child",
Id = 3
});
roots[0].Items.Add(new TreeItem
{
Text = "Item 1 second child",
Id = 4
});
roots[1].Items.Add(new TreeItem
{
Text = "Item 2 first child",
Id = 5
});
roots[1].Items.Add(new TreeItem
{
Text = "Item 2 second child",
Id = 6
});
TreeData = roots;
}
}
Regards,
Marin Bratanov
Progress Telerik