Hi,
if you change the
GraphicalViewElement.TimelineStartof 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!
