|
<SfTreeGrid IdMapping="TaskId" @ref="TreeGrid" ParentIdMapping="ParentId" DataSource="@TreeGridData" TreeColumnIndex="1" AutoCheckHierarchy="false">
<TreeGridEvents TValue="TreeData.BusinessObject" CheckboxChange="Change"></TreeGridEvents>
<TreeGridColumns>
<TreeGridColumn Field="TaskId" HeaderText="Task ID" Width="80" TextAlign="Syncfusion.Blazor.Grids.TextAlign.Right"></TreeGridColumn>
. . .
</TreeGridColumns>
</SfTreeGrid>
@code{
SfTreeGrid<TreeData.BusinessObject> TreeGrid;
private List<double> SelectIndex { get; set; }
private bool flag { get; set; } = true;
public List<TreeData.BusinessObject> TreeGridData { get; set; }
protected override void OnInitialized()
{
this.TreeGridData = TreeData.GetSelfDataSource().ToList();
}
public async Task Change(CheckBoxChangeEventArgs<TreeData.BusinessObject> args)
{
var Source = TreeGrid.GetCurrentViewRecords();
var keys = Source.GroupBy(rec => rec.ParentId).Where(g => g.Key != null).ToDictionary(g => g.Key?.ToString(), g => g.ToList()).Keys.ToList();
if(this.flag) { // prevented checkbox selection while using selectcheckbox method
var Row = Source.ElementAt(Convert.ToInt32(args.SelectedRowIndex));
if (Row.ParentId == null || keys.Contains(Row.TaskId.ToString()))
{
this.SelectedRowIndex = args.SelectedRowIndex;
var IndexNum = 0;
SelectIndex = new List<double>();
var Children = new List<TreeData.BusinessObject>();
var parents = new List<int?> { Row.TaskId };
foreach(var record in Source)
{
if (parents.Contains(record.ParentId)) // get the records for multi level childrecords
{
Children.Add(record);
parents.Add(record.TaskId);
}
}
foreach (var child in Children)
{
IndexNum = 0;
foreach (var record in Source)
{
if (record.TaskId == child.TaskId && child.Duration < 4)
{
SelectIndex.Add(IndexNum); // Add the SelectedIndex based on condition(Duration < 4)
}
IndexNum++;
}
}
this.flag = false;
await TreeGrid.SelectCheckboxes(SelectIndex.ToArray()); //select the checkboxes manually with this method
}
}
else
{
this.flag = true;
}
} |