TreeGrid Customizing Checkbox Column for Row Selection

Hi,

I am currently using TreeGrid and encountering an issue with row selection behavior. I want the selection behavior to match TreeView, where the parent node's state updates based on whether any child nodes are selected. I found a similar ticket here: Hierarchy Selection.

In that ticket, it was suggested to use column selection to achieve behavior similar to TreeView. However, in my case, I want the checkbox to be in a separate column.

Here is the code I’m using to attempt moving the checkbox to a separate column, but it doesn’t work as expected:


@using Syncfusion.Blazor.Grids

@using Syncfusion.Blazor.TreeGrid

<SfTreeGrid IdMapping="TaskId" ParentIdMapping="ParentId"

            DataSource="@TreeData" TreeColumnIndex="0"

            AutoCheckHierarchy="true">

    <TreeGridColumns>

        <TreeGridColumn ShowCheckbox="true"></TreeGridColumn>

        <TreeGridColumn Field="TaskId" HeaderText="Task ID" Width="80" TextAlign="Syncfusion.Blazor.Grids.TextAlign.Right"></TreeGridColumn>

        <TreeGridColumn Field="TaskName" HeaderText="Task Name" Width="90"></TreeGridColumn>

        <TreeGridColumn Field="StartDate" HeaderText="Start Date" TextAlign="Syncfusion.Blazor.Grids.TextAlign.Right" Format="yMd" Type="Syncfusion.Blazor.Grids.ColumnType.Date" Width="90"></TreeGridColumn>

        <TreeGridColumn Field="Duration" HeaderText="Duration" TextAlign="Syncfusion.Blazor.Grids.TextAlign.Right" Width="80"></TreeGridColumn>

        <TreeGridColumn Field="Progress" HeaderText="Progress" TextAlign="Syncfusion.Blazor.Grids.TextAlign.Right" Width="80"></TreeGridColumn>

    </TreeGridColumns>

</SfTreeGrid>


@code {

    public class BusinessObject {

        public int TaskId { get; set; }

        public string TaskName { get; set; }

        public DateOnly? StartDate { get; set; }

        public TimeOnly? StartTime { get; set; }

        public int Duration { get; set; }

        public int Progress { get; set; }

        public string Priority { get; set; }

        public int? ParentId { get; set; }

    }


    public List<BusinessObject> TreeData = new List<BusinessObject>();


    protected override void OnInitialized() {

        TreeData.Add(new BusinessObject() { TaskId = 1, TaskName = "Parent Task 1", StartDate = new DateOnly(2021, 03, 02), StartTime = new TimeOnly(10, 00, 00), Duration = 10, Progress = 70, ParentId = null, Priority = "High" });

        TreeData.Add(new BusinessObject() { TaskId = 2, TaskName = "Child Task 1", StartDate = new DateOnly(2021, 03, 04), StartTime = new TimeOnly(11, 30, 00), Duration = 4, Progress = 80, ParentId = 1, Priority = "Normal" });

        TreeData.Add(new BusinessObject() { TaskId = 3, TaskName = "Child Task 2", StartDate = new DateOnly(2021, 03, 06), StartTime = new TimeOnly(12, 00, 00), Duration = 5, Progress = 65, ParentId = 1, Priority = "Critical" });

        TreeData.Add(new BusinessObject() { TaskId = 4, TaskName = "Parent Task 2", StartDate = new DateOnly(2021, 03, 08), StartTime = new TimeOnly(13, 30, 00), Duration = 6, Progress = 77, ParentId = null, Priority = "Low" });

        TreeData.Add(new BusinessObject() { TaskId = 5, TaskName = "Child Task 5", StartDate = new DateOnly(2021, 07, 10), StartTime = new TimeOnly(14, 00, 00), Duration = 9, Progress = 25, ParentId = 4, Priority = "Normal" });

        TreeData.Add(new BusinessObject() { TaskId = 6, TaskName = "Child Task 6", StartDate = new DateOnly(2021, 10, 12), StartTime = new TimeOnly(16, 00, 00), Duration = 9, Progress = 7, ParentId = 5, Priority = "Normal" });

        TreeData.Add(new BusinessObject() { TaskId = 7, TaskName = "Parent Task 3", StartDate = new DateOnly(2021, 10, 14), StartTime = new TimeOnly(17, 30, 00), Duration = 4, Progress = 45, ParentId = null, Priority = "High" });

        TreeData.Add(new BusinessObject() { TaskId = 8, TaskName = "Child Task 7", StartDate = new DateOnly(2021, 10, 16), StartTime = new TimeOnly(18, 00, 00), Duration = 3, Progress = 38, ParentId = 7, Priority = "Critical" });

        TreeData.Add(new BusinessObject() { TaskId = 9, TaskName = "Child Task 8", StartDate = new DateOnly(2021, 02, 18), StartTime = new TimeOnly(19, 30, 00), Duration = 7, Progress = 70, ParentId = 7, Priority = "Low" });

    }

}


Actual Result:

Image_6376_1736332980634

Expected Result:

Image_4309_1736333051333

  • The checkboxes are displayed in a separate column. (like image)
  • The parent node's checkbox should automatically update its selection state based on the selection of child nodes (similar to TreeView behavior).

1 Reply

SK Sreedhar Kumar Panarapu Sreenivasulu Panarapu Syncfusion Team January 16, 2025 03:59 AM UTC

Hi Tien Pham ,
Greetings from Syncfusion Support!
Thank you for reaching out with your query. 
Unfortunately we do not have support for hierarchy row selection with individual checkbox column.
Only with checkbox on tree column, hierarchy row selection is supported.
If you have further questions or need additional clarification, feel free to ask!
Best regards,
Sreedhar Kumar.



Loader.
Up arrow icon