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 DateTime
radGanttView1.GanttViewElement.GraphicalViewElement.TimelineEnd = end;
// End is a DateTime
radGanttView1.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.LogViewer
006.
{
007.
public
class
WarehouseTimelineBehavior : BaseGanttViewTimelineBehavior
008.
{
009.
public
DateTime Start = DateTime.MinValue;
010.
public
DateTime End = DateTime.MaxValue;
011.
012.
public
override
DateTime AdjustedTimelineStart
013.
{
014.
get
015.
{
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 AdjustedTimelineEnd
025.
{
026.
get
027.
{
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.
}