Hi,
if you change the
GraphicalViewElement.TimelineStart
of the GanttView to a date inside the range of nodes, to just print a part of the Gannt, the graphical representation overlaps the table.
The expected result should be that the printed timeline gets cut at the TimelineStart, like it correctly does at TimelineEnd.
3 Answers, 1 is accepted
0
Accepted
Hello Gipsy,
Thank you for writing.
Indeed the reported behavior is an issue and I have logged it in our feedback portal, here: FIX. RadGanttView - the timeline items are not correctly printed if the GraphicalViewElement.TimelineStart property is set to a value inside the range of the timeline items. I have also updated your Telerik points. Additionally, you can subscribe to the item and be updated with all of its status changes.
Until we permanently fix the issue you will need to create a custom RadGanttView control and override the logic responsible for painting the timeline items:
I am also attaching a short video showing the result on my end after applying the workaround.
I hope this helps. Should you have further questions please do not hesitate to write back.
Regards,
Hristo
Progress Telerik
Thank you for writing.
Indeed the reported behavior is an issue and I have logged it in our feedback portal, here: FIX. RadGanttView - the timeline items are not correctly printed if the GraphicalViewElement.TimelineStart property is set to a value inside the range of the timeline items. I have also updated your Telerik points. Additionally, you can subscribe to the item and be updated with all of its status changes.
Until we permanently fix the issue you will need to create a custom RadGanttView control and override the logic responsible for painting the timeline items:
public
partial
class
RadForm1 : Telerik.WinControls.UI.RadForm
{
public
RadForm1()
{
InitializeComponent();
this
.radGanttView1.GanttViewElement.GraphicalViewElement.TimelineStart =
new
DateTime(2010, 10, 9);
this
.radGanttView1.GanttViewElement.GraphicalViewElement.TimelineEnd =
new
DateTime(2010, 12, 10);
//setup data items
GanttViewDataItem item1 =
new
GanttViewDataItem();
item1.Start =
new
DateTime(2010, 10, 10);
item1.End =
new
DateTime(2010, 10, 15);
item1.Progress = 30m;
item1.Title =
"Summary task.1. title"
;
GanttViewDataItem subitem11 =
new
GanttViewDataItem();
subitem11.Start =
new
DateTime(2010, 10, 10);
subitem11.End =
new
DateTime(2010, 10, 12);
subitem11.Progress = 10m;
subitem11.Title =
"Sub-task.1.1 title"
;
GanttViewDataItem subitem12 =
new
GanttViewDataItem();
subitem12.Start =
new
DateTime(2010, 10, 12);
subitem12.End =
new
DateTime(2010, 10, 15);
subitem12.Progress = 20m;
subitem12.Title =
"Sub-task.1.2 title"
;
//add subitems
item1.Items.Add(subitem11);
item1.Items.Add(subitem12);
this
.radGanttView1.Items.Add(item1);
GanttViewDataItem item2 =
new
GanttViewDataItem();
item2.Start =
new
DateTime(2010, 10, 12);
item2.End =
new
DateTime(2010, 10, 18);
item2.Progress = 40m;
item2.Title =
"Summary task.2. title"
;
GanttViewDataItem subitem21 =
new
GanttViewDataItem();
subitem21.Start =
new
DateTime(2010, 10, 12);
subitem21.End =
new
DateTime(2010, 10, 13);
subitem21.Progress = 10m;
subitem21.Title =
"Sub-task.2.1 title"
;
GanttViewDataItem subitem22 =
new
GanttViewDataItem();
subitem22.Start =
new
DateTime(2010, 10, 13);
subitem22.End =
new
DateTime(2010, 10, 18);
subitem22.Progress = 30m;
subitem22.Title =
"Sub-task.2.2 title"
;
GanttViewDataItem subitem23 =
new
GanttViewDataItem();
subitem23.Start =
new
DateTime(2010, 10, 18);
subitem23.End =
new
DateTime(2010, 10, 18);
subitem23.Title =
"Sub-task.2.3 title"
;
//add subitems
item2.Items.Add(subitem21);
item2.Items.Add(subitem22);
item2.Items.Add(subitem23);
this
.radGanttView1.Items.Add(item2);
//add links between items
GanttViewLinkDataItem link1 =
new
GanttViewLinkDataItem();
link1.StartItem = subitem11;
link1.EndItem = subitem12;
link1.LinkType = TasksLinkType.FinishToStart;
this
.radGanttView1.Links.Add(link1);
GanttViewLinkDataItem link2 =
new
GanttViewLinkDataItem();
link2.StartItem = subitem21;
link2.EndItem = subitem22;
link2.LinkType = TasksLinkType.StartToStart;
this
.radGanttView1.Links.Add(link2);
GanttViewLinkDataItem link3 =
new
GanttViewLinkDataItem();
link3.StartItem = subitem22;
link3.EndItem = subitem23;
link3.LinkType = TasksLinkType.FinishToStart;
this
.radGanttView1.Links.Add(link3);
GanttViewTextViewColumn titleColumn =
new
GanttViewTextViewColumn(
"Title"
);
GanttViewTextViewColumn startColumn =
new
GanttViewTextViewColumn(
"Start"
);
GanttViewTextViewColumn endColumn =
new
GanttViewTextViewColumn(
"End"
);
this
.radGanttView1.GanttViewElement.Columns.Add(titleColumn);
this
.radGanttView1.GanttViewElement.Columns.Add(startColumn);
this
.radGanttView1.GanttViewElement.Columns.Add(endColumn);
this
.radGanttView1.GanttViewElement.GraphicalViewElement.TimelineStart =
new
DateTime(2010, 10, 13);
}
private
void
radButton1_Click(
object
sender, EventArgs e)
{
RadPrintDocument doc =
new
RadPrintDocument();
doc.Landscape =
true
;
RadPrintPreviewDialog dialog =
new
RadPrintPreviewDialog();
doc.AssociatedObject =
this
.radGanttView1;
dialog.Document = doc;
dialog.ShowDialog();
}
}
public
class
MyRadGanttView : RadGanttView
{
public
override
string
ThemeClassName
{
get
{
return
typeof
(RadGanttView).FullName;
}
}
protected
override
PointF[] GetElementShape(GanttViewPrintElementContext context, RectangleF rect)
{
if
(shouldPaintStartCap)
{
return
base
.GetElementShape(context, rect);
}
switch
(context)
{
case
GanttViewPrintElementContext.SummaryTaskElement:
PointF[] summaryPoints =
new
PointF[5];
summaryPoints[0] = rect.Location;
summaryPoints[1] =
new
PointF(rect.X, rect.Y + rect.Height / 4f);
summaryPoints[2] =
new
PointF(rect.Right - 3, rect.Y + rect.Height / 4f);
summaryPoints[3] =
new
PointF(rect.Right, rect.Y + rect.Height / 2f);
summaryPoints[4] =
new
PointF(rect.Right, rect.Y);
return
summaryPoints;
case
GanttViewPrintElementContext.MilestoneElement:
PointF[] milestonePoints =
new
PointF[4];
milestonePoints[0] =
new
PointF(rect.X, rect.Y);
milestonePoints[1] =
new
PointF(rect.X + rect.Height / 2f, rect.Y + rect.Height / 2f);
milestonePoints[2] =
new
PointF(rect.X, rect.Y + rect.Height);
milestonePoints[3] =
new
PointF(rect.X - rect.Height / 2f, rect.Y + rect.Height / 2f);
return
milestonePoints;
default
:
return
null
;
}
}
private
bool
shouldPaintStartCap;
protected
override
RectangleF GetPrintRectangle(GanttViewDataItem item,
int
index)
{
if
(index < 0)
{
return
RectangleF.Empty;
}
float
x = (
float
)((item.Start -
this
.GanttViewElement.GraphicalViewElement.TimelineBehavior.AdjustedTimelineStart).TotalSeconds /
this
.GanttViewElement.GraphicalViewElement.OnePixelTime.TotalSeconds);
this
.shouldPaintStartCap = x > 0 ?
true
:
false
;
x = Math.Max(x, 0);
float
y = index * (
this
.GanttViewElement.ItemHeight +
this
.GanttViewElement.ItemSpacing) +
this
.GanttViewElement.HeaderHeight;
float
width = (
float
)((item.End - item.Start).TotalSeconds / (
float
)
this
.GanttViewElement.GraphicalViewElement.OnePixelTime.TotalSeconds);
return
new
RectangleF(x, y, width, (
this
.GanttViewElement.ItemHeight +
this
.GanttViewElement.ItemSpacing));
}
}
I am also attaching a short video showing the result on my end after applying the workaround.
I hope this helps. Should you have further questions please do not hesitate to write back.
Regards,
Hristo
Progress Telerik
Try our brand new, jQuery-free Angular 2 components built from ground-up which deliver the business app essential building blocks - a grid component, data visualization (charts) and form elements.
0
Hello Gipsy,
Thank you for writing.
Indeed the reported behavior is an issue and I have logged it in our feedback portal, here: FIX. RadGanttView - the timeline items are not correctly printed if the GraphicalViewElement.TimelineStart property is set to a value inside the range of the timeline items. I have also updated your Telerik points. Additionally, you can subscribe to the item and be updated with all of its status changes.
Until we permanently fix the issue you will need to create a custom RadGanttView control and override the logic responsible for painting the timeline items:
I am also attaching a short video showing the result on my end after applying the workaround.
I hope this helps. Should you have further questions please do not hesitate to write back.
Regards,
Hristo
Progress Telerik
Thank you for writing.
Indeed the reported behavior is an issue and I have logged it in our feedback portal, here: FIX. RadGanttView - the timeline items are not correctly printed if the GraphicalViewElement.TimelineStart property is set to a value inside the range of the timeline items. I have also updated your Telerik points. Additionally, you can subscribe to the item and be updated with all of its status changes.
Until we permanently fix the issue you will need to create a custom RadGanttView control and override the logic responsible for painting the timeline items:
public
partial
class
RadForm1 : Telerik.WinControls.UI.RadForm
{
public
RadForm1()
{
InitializeComponent();
this
.radGanttView1.GanttViewElement.GraphicalViewElement.TimelineStart =
new
DateTime(2010, 10, 9);
this
.radGanttView1.GanttViewElement.GraphicalViewElement.TimelineEnd =
new
DateTime(2010, 12, 10);
//setup data items
GanttViewDataItem item1 =
new
GanttViewDataItem();
item1.Start =
new
DateTime(2010, 10, 10);
item1.End =
new
DateTime(2010, 10, 15);
item1.Progress = 30m;
item1.Title =
"Summary task.1. title"
;
GanttViewDataItem subitem11 =
new
GanttViewDataItem();
subitem11.Start =
new
DateTime(2010, 10, 10);
subitem11.End =
new
DateTime(2010, 10, 12);
subitem11.Progress = 10m;
subitem11.Title =
"Sub-task.1.1 title"
;
GanttViewDataItem subitem12 =
new
GanttViewDataItem();
subitem12.Start =
new
DateTime(2010, 10, 12);
subitem12.End =
new
DateTime(2010, 10, 15);
subitem12.Progress = 20m;
subitem12.Title =
"Sub-task.1.2 title"
;
//add subitems
item1.Items.Add(subitem11);
item1.Items.Add(subitem12);
this
.radGanttView1.Items.Add(item1);
GanttViewDataItem item2 =
new
GanttViewDataItem();
item2.Start =
new
DateTime(2010, 10, 12);
item2.End =
new
DateTime(2010, 10, 18);
item2.Progress = 40m;
item2.Title =
"Summary task.2. title"
;
GanttViewDataItem subitem21 =
new
GanttViewDataItem();
subitem21.Start =
new
DateTime(2010, 10, 12);
subitem21.End =
new
DateTime(2010, 10, 13);
subitem21.Progress = 10m;
subitem21.Title =
"Sub-task.2.1 title"
;
GanttViewDataItem subitem22 =
new
GanttViewDataItem();
subitem22.Start =
new
DateTime(2010, 10, 13);
subitem22.End =
new
DateTime(2010, 10, 18);
subitem22.Progress = 30m;
subitem22.Title =
"Sub-task.2.2 title"
;
GanttViewDataItem subitem23 =
new
GanttViewDataItem();
subitem23.Start =
new
DateTime(2010, 10, 18);
subitem23.End =
new
DateTime(2010, 10, 18);
subitem23.Title =
"Sub-task.2.3 title"
;
//add subitems
item2.Items.Add(subitem21);
item2.Items.Add(subitem22);
item2.Items.Add(subitem23);
this
.radGanttView1.Items.Add(item2);
//add links between items
GanttViewLinkDataItem link1 =
new
GanttViewLinkDataItem();
link1.StartItem = subitem11;
link1.EndItem = subitem12;
link1.LinkType = TasksLinkType.FinishToStart;
this
.radGanttView1.Links.Add(link1);
GanttViewLinkDataItem link2 =
new
GanttViewLinkDataItem();
link2.StartItem = subitem21;
link2.EndItem = subitem22;
link2.LinkType = TasksLinkType.StartToStart;
this
.radGanttView1.Links.Add(link2);
GanttViewLinkDataItem link3 =
new
GanttViewLinkDataItem();
link3.StartItem = subitem22;
link3.EndItem = subitem23;
link3.LinkType = TasksLinkType.FinishToStart;
this
.radGanttView1.Links.Add(link3);
GanttViewTextViewColumn titleColumn =
new
GanttViewTextViewColumn(
"Title"
);
GanttViewTextViewColumn startColumn =
new
GanttViewTextViewColumn(
"Start"
);
GanttViewTextViewColumn endColumn =
new
GanttViewTextViewColumn(
"End"
);
this
.radGanttView1.GanttViewElement.Columns.Add(titleColumn);
this
.radGanttView1.GanttViewElement.Columns.Add(startColumn);
this
.radGanttView1.GanttViewElement.Columns.Add(endColumn);
this
.radGanttView1.GanttViewElement.GraphicalViewElement.TimelineStart =
new
DateTime(2010, 10, 13);
}
private
void
radButton1_Click(
object
sender, EventArgs e)
{
RadPrintDocument doc =
new
RadPrintDocument();
doc.Landscape =
true
;
RadPrintPreviewDialog dialog =
new
RadPrintPreviewDialog();
doc.AssociatedObject =
this
.radGanttView1;
dialog.Document = doc;
dialog.ShowDialog();
}
}
public
class
MyRadGanttView : RadGanttView
{
public
override
string
ThemeClassName
{
get
{
return
typeof
(RadGanttView).FullName;
}
}
protected
override
PointF[] GetElementShape(GanttViewPrintElementContext context, RectangleF rect)
{
if
(shouldPaintStartCap)
{
return
base
.GetElementShape(context, rect);
}
switch
(context)
{
case
GanttViewPrintElementContext.SummaryTaskElement:
PointF[] summaryPoints =
new
PointF[5];
summaryPoints[0] = rect.Location;
summaryPoints[1] =
new
PointF(rect.X, rect.Y + rect.Height / 4f);
summaryPoints[2] =
new
PointF(rect.Right - 3, rect.Y + rect.Height / 4f);
summaryPoints[3] =
new
PointF(rect.Right, rect.Y + rect.Height / 2f);
summaryPoints[4] =
new
PointF(rect.Right, rect.Y);
return
summaryPoints;
case
GanttViewPrintElementContext.MilestoneElement:
PointF[] milestonePoints =
new
PointF[4];
milestonePoints[0] =
new
PointF(rect.X, rect.Y);
milestonePoints[1] =
new
PointF(rect.X + rect.Height / 2f, rect.Y + rect.Height / 2f);
milestonePoints[2] =
new
PointF(rect.X, rect.Y + rect.Height);
milestonePoints[3] =
new
PointF(rect.X - rect.Height / 2f, rect.Y + rect.Height / 2f);
return
milestonePoints;
default
:
return
null
;
}
}
private
bool
shouldPaintStartCap;
protected
override
RectangleF GetPrintRectangle(GanttViewDataItem item,
int
index)
{
if
(index < 0)
{
return
RectangleF.Empty;
}
float
x = (
float
)((item.Start -
this
.GanttViewElement.GraphicalViewElement.TimelineBehavior.AdjustedTimelineStart).TotalSeconds /
this
.GanttViewElement.GraphicalViewElement.OnePixelTime.TotalSeconds);
this
.shouldPaintStartCap = x > 0 ?
true
:
false
;
x = Math.Max(x, 0);
float
y = index * (
this
.GanttViewElement.ItemHeight +
this
.GanttViewElement.ItemSpacing) +
this
.GanttViewElement.HeaderHeight;
float
width = (
float
)((item.End - item.Start).TotalSeconds / (
float
)
this
.GanttViewElement.GraphicalViewElement.OnePixelTime.TotalSeconds);
return
new
RectangleF(x, y, width, (
this
.GanttViewElement.ItemHeight +
this
.GanttViewElement.ItemSpacing));
}
}
I am also attaching a short video showing the result on my end after applying the workaround.
I hope this helps. Should you have further questions please do not hesitate to write back.
Regards,
Hristo
Progress Telerik
Try our brand new, jQuery-free Angular 2 components built from ground-up which deliver the business app essential building blocks - a grid component, data visualization (charts) and form elements.
0
gipsy
Top achievements
Rank 1
answered on 11 Sep 2017, 07:20 AM
Thanks alot, that's working!