Hello, I have tried modifying https://docs.telerik.com/devtools/winforms/ganttview/timeline/custom-timeline to have it do custom ranges, however when I run my copy I get a fully blank header. See attached for images.
My setting the custom behavior:
radGanttView1.GanttViewElement.GraphicalViewElement.TimelineStart = start; // Start is a DateTimeradGanttView1.GanttViewElement.GraphicalViewElement.TimelineEnd = end; // End is a DateTimeradGanttView1.GanttViewElement.GraphicalViewElement.OnePixelTime = TimeSpan.FromMinutes(0.0025);radGanttView1.GanttViewElement.GraphicalViewElement.TimelineRange = TimeRange.Custom;var behavior = new WarehouseTimelineBehavior { Start = start, End = end };radGanttView1.GanttViewElement.GraphicalViewElement.TimelineBehavior = behavior;And my Behavior class:
001.using System;002.using System.Collections.Generic;003.using Telerik.WinControls.UI;004. 005.namespace WarehouseBuilder.LogViewer006.{007. public class WarehouseTimelineBehavior : BaseGanttViewTimelineBehavior008. {009. public DateTime Start = DateTime.MinValue;010. public DateTime End = DateTime.MaxValue;011. 012. public override DateTime AdjustedTimelineStart013. {014. get015. {016. if (GraphicalViewElement.TimelineRange != TimeRange.Custom || Start == DateTime.MinValue)017. {018. return base.AdjustedTimelineStart;019. }020. return Start;021. }022. }023. 024. public override DateTime AdjustedTimelineEnd025. {026. get027. {028. if (GraphicalViewElement.TimelineRange != TimeRange.Custom || End == DateTime.MaxValue)029. {030. return base.AdjustedTimelineEnd;031. }032. return End;033. }034. }035. 036. public override IList<GanttViewTimelineDataItem> BuildTimelineDataItems(TimeRange range)037. {038. if (range != TimeRange.Custom)039. {040. return base.BuildTimelineDataItems(range);041. }042. return this.BuildTimelineDataItemsForDecadesRange();043. }044. 045. public IList<GanttViewTimelineDataItem> BuildTimelineDataItemsForDecadesRange()046. {047. List<GanttViewTimelineDataItem> result = new List<GanttViewTimelineDataItem>();048. DateTime currentDate = AdjustedTimelineStart;049. int currentMinuteNumber = currentDate.Minute;050. int newMinuteNumber = currentMinuteNumber;051. 052. GanttViewTimelineDataItem item = new GanttViewTimelineDataItem(currentDate, currentDate.AddMinutes(5), GraphicalViewElement.TimelineRange, GraphicalViewElement.OnePixelTime);053. 054. result.Add(item);055. 056. while (currentDate < AdjustedTimelineEnd)057. {058. item.End = currentDate.AddMinutes(5);059. currentDate = currentDate.AddMinutes(5);060. newMinuteNumber = currentDate.Minute;061. 062. if (newMinuteNumber != currentMinuteNumber && currentDate <= AdjustedTimelineEnd)063. {064. currentMinuteNumber = newMinuteNumber;065. item = new GanttViewTimelineDataItem(currentDate, currentDate, GraphicalViewElement.TimelineRange, GraphicalViewElement.OnePixelTime);066. result.Add(item);067. }068. }069. 070. return result;071. }072. 073. public override GanttTimelineCellsInfo GetTimelineCellInfoForItem(GanttViewTimelineDataItem item, TimeRange timeRange)074. {075. if (timeRange != TimeRange.Custom)076. {077. return base.GetTimelineCellInfoForItem(item, timeRange);078. }079. 080. return GetTimelineCellInfoForDecadeRange(item);081. }082. 083. public GanttTimelineCellsInfo GetTimelineCellInfoForDecadeRange(GanttViewTimelineDataItem item)084. {085. int minutes = 5;086. 087. if (item.Start == AdjustedTimelineStart)088. {089. if (item.Start.Minute % 5 > 0)090. {091. minutes = 10 - (item.Start.Minute % 5);092. }093. }094. 095. if (item.End == AdjustedTimelineEnd)096. {097. if (item.End.Minute % 5 > 0)098. {099. minutes = item.End.Minute % 5;100. }101. }102. 103. return new GanttTimelineCellsInfo(minutes);104. }105. 106. public override string GetTimelineTopElementText(GanttViewTimelineDataItem item)107. {108. if (item.Range != TimeRange.Custom)109. {110. return base.GetTimelineTopElementText(item);111. }112. 113. string format = "{0} - {1}";114. 115. return string.Format(System.Threading.Thread.CurrentThread.CurrentUICulture, format, item.Start, item.End);116. }117. 118. public override string GetTimelineBottomElementText(GanttViewTimelineDataItem item, int index)119. {120. if (item.Range != TimeRange.Custom)121. {122. return base.GetTimelineBottomElementText(item, index);123. }124. 125. string format = "{0:hh:mm}";126. 127. return string.Format(System.Threading.Thread.CurrentThread.CurrentCulture, format, new DateTime(item.Start.Minute + index, 1, 1));128. }129. }130.}
