diff --git a/knowledge-base/gantt-persist-treelist-width-after-refresh.md b/knowledge-base/gantt-persist-treelist-width-after-refresh.md new file mode 100644 index 000000000..e0531f310 --- /dev/null +++ b/knowledge-base/gantt-persist-treelist-width-after-refresh.md @@ -0,0 +1,213 @@ +--- +title: Persist Gantt TreeList after Refresh +description: How to persist the width of the Gantt's treelist after refreshing its data? +type: how-to +page_title: How to Display Model Fields in the Gantt Tooltip? +slug: gantt-kb-persist-treelist-width-after-refresh +tags: gantt, blazor, treelist, width, persist +res_type: kb +ticketid: 1690467 +--- + +## Environment + + + + + + + +
ProductGantt for Blazor
+ +## Description + +If I resize the TreeList part of the Gantt, it gets back to its initial width, after I refresh the Gantt's data. How can I persist the current TreeList width? + +## Solution + +To persist the current TreeList width, follow the steps below: + +1. Bind the `TreeListWidth` parameter of the Gantt to a property. In the example below, the property is named `ListWidth`. +2. In the methods that manipulate the data of the Gantt (`AddRootTask` and `RemoveTask`), use JavaScript interop to invoke a function. The logic in the function gets and returns the current width of the TreeList. +3. Use the current width value to update the value of the `ListWidth` property, before refreshing the data by calling `.Rebind()`. + +````RAZOR +@inject IJSRuntime JS + +Add root task + +Remove Task 1 + + + + + + + + + + + + + + + + + + + + + +@code { + private TelerikGantt GanttRef; + private string ListWidth { get; set; } = "390px"; + + private List GanttData { get; set; } + + private GanttView SelectedView { get; set; } = GanttView.Week; + + private async Task AddRootTask() + { + var i = GanttData.Last().Id + 1; + + GanttData.Insert(0, new FlatModel() + { + Id = i, + ParentId = null, + Title = "new task", + PercentComplete = 0, + Start = new DateTime(2021, 7, 5), + End = new DateTime(2021, 7, 15) + }); + + var currentListWidth = await JS.InvokeAsync("getListSize"); + ListWidth = currentListWidth; + + GanttRef.Rebind(); + } + + private async Task RemoveTask() + { + var taskToRemove = GanttData.FirstOrDefault(x => x.Title == "Task 1"); + + GanttData.Remove(taskToRemove); + + var currentListWidth = await JS.InvokeAsync("getListSize"); + ListWidth = currentListWidth; + + GanttRef.Rebind(); + } + + class FlatModel + { + public int Id { get; set; } + public int? ParentId { get; set; } + public string Title { get; set; } + public double PercentComplete { get; set; } + public DateTime Start { get; set; } + public DateTime End { get; set; } + } + + private int LastId { get; set; } = 1; + + protected override void OnInitialized() + { + GanttData = new List(); + var random = new Random(); + + for (int i = 1; i < 6; i++) + { + var newItem = new FlatModel() + { + Id = LastId, + Title = "Task " + i.ToString(), + Start = new DateTime(2021, 7, 5 + i), + End = new DateTime(2021, 7, 11 + i), + PercentComplete = Math.Round(random.NextDouble(), 2) + }; + + GanttData.Add(newItem); + var parentId = LastId; + LastId++; + + for (int j = 0; j < 5; j++) + { + GanttData.Add(new FlatModel() + { + Id = LastId, + ParentId = parentId, + Title = " Task " + i + " : " + j.ToString(), + Start = new DateTime(2021, 7, 5 + j), + End = new DateTime(2021, 7, 6 + i + j), + PercentComplete = Math.Round(random.NextDouble(), 2) + }); + + LastId++; + } + } + + base.OnInitialized(); + } + + private void UpdateItem(GanttUpdateEventArgs args) + { + var item = args.Item as FlatModel; + + var foundItem = GanttData.FirstOrDefault(i => i.Id.Equals(item.Id)); + + if (foundItem != null) + { + foundItem.Title = item.Title; + foundItem.Start = item.Start; + foundItem.End = item.End; + foundItem.PercentComplete = item.PercentComplete; + } + } + + private void DeleteItem(GanttDeleteEventArgs args) + { + var item = GanttData.FirstOrDefault(i => i.Id.Equals((args.Item as FlatModel).Id)); + + RemoveChildRecursive(item); + } + + private void RemoveChildRecursive(FlatModel item) + { + var children = GanttData.Where(i => item.Id.Equals(i.ParentId)).ToList(); + + foreach (var child in children) + { + RemoveChildRecursive(child); + } + + GanttData.Remove(item); + } +} +```` + +## See Also + +- [Gantt Overview - Telerik UI for Blazor](slug:gantt-overview)