Skip to main content
All docs
V24.1

Get Started with Blazor TreeList

  • 6 minutes to read

This tutorial describes how to create a simple Blazor application that uses a DevExpress TreeList component.

Get Started with TreeList - Total Summary

The following example contains full source code for this tutorial: Blazor TreeList - Getting Started.

Create an Application

Refer to the following section for instructions: Create an application. Make sure that resources and themes are linked correctly.

Enable Interactivity on a Page

Blazor TreeList does not support static render mode. Enable interactivity to use the component in your application. Refer to the following topic for more details: Enable Interactive Render Mode.

Prepare a Data Source

  1. Add the EmployeeTask class to your project:

    public class EmployeeTask{
        public int Id { get; set; }
        public int ParentId { get; set; }
        public string Name { get; set; }
        public string EmployeeName { get; set; }
        public DateTime StartDate { get; set; }
        public DateTime DueDate { get; set; }
        public int Progress { get; set; }
    
        public EmployeeTask(
            int id,
            int parentId,
            string name,
            string employeeName,
            DateTime startDate,
            DateTime dueDate,
            int progress
            )
        {
            Id = id;
            ParentId = parentId;
            Name = name;
            EmployeeName = employeeName;
            StartDate = startDate;
            DueDate = dueDate;
            Progress = progress;
        }
    }
    
  2. Add the EmployeeTaskService class to your project:

    public class EmployeeTaskService {
        public List<EmployeeTask> GenerateData() {
            return new List<EmployeeTask>() {
                new EmployeeTask(1, 0, "Simplify & Clarify Product Messaging", "John Heart", new DateTime(2018, 4, 3), new DateTime(2018, 4, 14), 14),
                new EmployeeTask(2, 1, "Prepare Financial Reports", "Samantha Bright", new DateTime(2018, 4, 3), new DateTime(2018, 4, 7), 17),
                new EmployeeTask(3, 1, "Prepare Marketing Plan", "Arthur Miller", new DateTime(2018, 4, 7), new DateTime(2018, 4, 14), 11),
                new EmployeeTask(4, 0, "Create Action Plan To Improve Customer Engagement", "Robert Reagan", new DateTime(2017, 8, 8), new DateTime(2018, 4, 8), 23),
                new EmployeeTask(5, 4, "Update Personnel Files", "Greta Sims", new DateTime(2017, 8, 8), new DateTime(2017, 10, 18), 100),
                new EmployeeTask(6, 4, "Review Health Insurance Options ", "Brett Wade", new DateTime(2017, 9, 27), new DateTime(2017, 11, 10), 37),
                new EmployeeTask(7, 4, "Choose Between PPO And HMO Health Plan", "Sandra Johnson", new DateTime(2017, 12, 13), new DateTime(2018, 3, 23), 17),
                new EmployeeTask(8, 4, "Update Google Adwords Strategy", "Ed Holmes", new DateTime(2017, 8, 23), new DateTime(2017, 12, 23), 45),
                new EmployeeTask(9, 4, "Create New Brochure Design", "Barb Banks", new DateTime(2018, 1, 3), new DateTime(2018, 3, 14), 17),
                new EmployeeTask(10, 4, "Obtain Price Quote For New Brochure", "Kevin Carter", new DateTime(2018, 2, 1), new DateTime(2018, 3, 15), 18),
                new EmployeeTask(11, 4, "Brochure Design Review", "Cindy Stanwick", new DateTime(2017, 8, 22), new DateTime(2017, 10, 28), 4),
                new EmployeeTask(12, 4, "Review Website Re-Design Strategy", "Sammy Hill", new DateTime(2017, 9, 16), new DateTime(2018, 3, 6), 73),
                new EmployeeTask(13, 4, "Roll Out New Website", "Davey Jones", new DateTime(2017, 11, 7), new DateTime(2018, 2, 6), 9),
                new EmployeeTask(14, 4, "Update Sales/Marketing Strategy", "Victor Norris", new DateTime(2017, 12, 13), new DateTime(2018, 4, 2), 5),
                new EmployeeTask(15, 4, "Update Sales/Revenue Report", "Mary Stern", new DateTime(2017, 12, 25), new DateTime(2018, 4, 2), 4),
                new EmployeeTask(16, 4, "Direct Vs Online Sales Comparison Report", "Robin Cosworth", new DateTime(2018, 1, 2), new DateTime(2018, 3, 20), 14),
                new EmployeeTask(17, 4, "Review Sales Report and Approve Modifications", "Kelly Rodriguez", new DateTime(2017, 9, 4), new DateTime(2017, 10, 30), 8),
                new EmployeeTask(18, 4, "Update R&D Strategy", "James Anderson", new DateTime(2017, 11, 13), new DateTime(2017, 12, 4), 12),
                new EmployeeTask(19, 4, "Discuss Updated R&D Strategy", "Antony Remmen", new DateTime(2017, 10, 29), new DateTime(2017, 12, 31), 14),
                new EmployeeTask(20, 4, "Update QA Strategy", "Olivia Peyton", new DateTime(2017, 10, 31), new DateTime(2017, 11, 2), 18),
                new EmployeeTask(21, 4, "Schedule Training Events", "Taylor Riley", new DateTime(2017, 11, 19), new DateTime(2018, 4, 7), 21),
                new EmployeeTask(22, 4, "Approve The Hiring Of John Jeffers", "Amelia Harper", new DateTime(2018, 1, 7), new DateTime(2018, 4, 8), 10),
                new EmployeeTask(23, 0, "Increase Average Subscription Price ", "Wally Hobbs", new DateTime(2017, 8, 9), new DateTime(2017, 9, 13), 96),
                new EmployeeTask(24, 23, "Update Non-Compete Agreements", "Brad Jameson", new DateTime(2017, 8, 9), new DateTime(2017, 9, 3), 96),
                new EmployeeTask(25, 23, "Update Employee Records With New NDA", "Karen Goodson", new DateTime(2017, 8, 23), new DateTime(2018, 9, 10), 100)
            };
        }
    }
    
  3. Register the EmployeeTaskService in the Program.cs file.

    // ...
    builder.Services.AddSingleton<EmployeeTaskService>();
    

Add a TreeList and Bind It to Data

  1. Add <DxTreeList></DxTreeList> tags to the Index.razor page.

    @page "/"
    
    <DxTreeList>
    </DxTreeList>
    
  2. Inject the EmployeeTaskService to the page.

    @page "/"
    @inject EmployeeTaskService TaskService
    
    <DxTreeList>
    </DxTreeList>
    
  3. In the @code block, declare a list of EmployeeTask objects. Populate this list in the OnInitialized lifecycle method.

    @code {
        List<EmployeeTask> Data { get; set; }
    
        protected override void OnInitialized() {
            Data = TaskService.GenerateData();
        }
    }
    
  4. Bind the Data property to the list.

    <DxTreeList Data="@Data">
    </DxTreeList>
    
  5. Specify KeyFieldName and ParentKeyFieldName properties to build a tree structure.

    <DxTreeList Data="@Data" KeyFieldName="Id" ParentKeyFieldName="ParentId">
    </DxTreeList>
    

Refer to the following topic for more information: Bind Blazor TreeList to Data.

Add Columns

  1. Add five DxTreeListDataColumn objects to the Columns collection.
  2. Use the FieldName property to bind columns to data source fields.
  3. Optional. Specify the following settings to customize these columns:

    Caption
    Specifies the column’s caption.
    DisplayFormat
    Specifies the format of column and summary values calculated for this column.
    Width
    Specifies the column’s width in CSS units.
    FixedPosition
    Allows you to anchor the column to the TreeList’s left or right edge.
<DxTreeList Data="@Data" KeyFieldName="Id" ParentKeyFieldName="ParentId">
    <Columns>
        <DxTreeListDataColumn FieldName="Name" Caption="Task" Width="40%"/>
        <DxTreeListDataColumn FieldName="EmployeeName" />
        <DxTreeListDataColumn FieldName="StartDate" MinWidth="100" />
        <DxTreeListDataColumn FieldName="DueDate" MinWidth="100" />
        <DxTreeListDataColumn FieldName="Progress" DisplayFormat="{0}%" />
    </Columns>
</DxTreeList>

Get Started with TreeList - Add columns

Sort Data

The TreeList component allows users to sort data by multiple columns. Specify SortOrder and SortIndex properties to configure initial sort settings.

<DxTreeListDataColumn FieldName="DueDate"
                      MinWidth="100"
                      SortOrder="TreeListColumnSortOrder.Ascending"
                      SortIndex="0" />
<DxTreeListDataColumn FieldName="Progress"
                      SortOrder="TreeListColumnSortOrder.Descending"
                      SortIndex="1" />

Get Started with TreeList - Sort order

Filter Data

  1. Set the ShowFilterRow property to true to display the filter row that allows users to filter data.

  2. Use the FilterTreeMode property to specify how the TreeList component displays filtered nodes:

    • ParentBranch (Default) – The component displays a node that meets the filter criteria and all its parent nodes, even if they do not meet the criteria.

    • EntireBranch – The component displays a node that meets the filter criteria and all its parent and child nodes, even if they do not meet the criteria.

  3. Specify FilterRowValue and FilterRowOperatorType properties to configure initial filter row values.

<DxTreeList Data="@Data"
            KeyFieldName="Id"
            ParentKeyFieldName="ParentId"
            ShowFilterRow="true"
            FilterTreeMode="TreeListFilterTreeMode.EntireBranch">
    <Columns>
        <DxTreeListDataColumn FieldName="EmployeeName"
                              FilterRowValue='"John"'
                              FilterRowOperatorType="TreeListFilterRowOperatorType.Contains" />
        <!-- ... -->
    </Columns>
</DxTreeList>

Get Started with TreeList - Filter data

Add a Total Summary

Follow the steps below to display a total summary in the TreeList component:

  1. Add a DxTreeListSummaryItem object to the TotalSummary collection.
  2. Specify the item’s SummaryType and FieldName properties.
  3. Optional. Specify other item settings (FooterColumnName, DisplayText, and so on).
<DxTreeList Data="@Data" ... >
    <TotalSummary>
        <DxTreeListSummaryItem FieldName="Name" SummaryType="TreeListSummaryItemType.Count" />
        <DxTreeListSummaryItem FieldName="Progress" SummaryType="TreeListSummaryItemType.Avg" />
    </TotalSummary>
</DxTreeList>

More Features

For more information about TreeList features, refer to the following root topic: Blazor TreeList (CTP).