Completed
Last Updated: 29 Sep 2014 09:07 by ADMIN
To reproduce: add a RadGanttView and populate it with data. Use the  GraphicalViewItemFormatting event in order to change the e.ItemElement.TaskElement.Text. However, the changes are not applied.

Workaround:
 private void radGanttView1_GraphicalViewItemFormatting(object sender, GanttViewGraphicalViewItemFormattingEventArgs e)
 {
     e.ItemElement.Tag = "Custom text";
 }

 public class CustomRadGanttView : RadGanttView
 {
     protected override RadGanttViewElement CreateGanttViewElement()
     {
         return new CustomRadGanttViewElement();
     }

     public override string ThemeClassName  
     { 
         get 
         { 
             return typeof(RadGanttView).FullName;  
         }
     }
 }

 public class CustomRadGanttViewElement : RadGanttViewElement
 {
     public CustomRadGanttViewElement()
     {
     }

     protected override Type ThemeEffectiveType     
     { 
         get    
         { 
             return typeof(RadGanttViewElement);     
         }
     }
     
     protected override GanttViewGraphicalViewElement CreateGraphicalViewElement(RadGanttViewElement ganttView)
     {
         return new CustomGanttViewGraphicalViewElement(ganttView);
     }
 }

 public class CustomGanttViewGraphicalViewElement : GanttViewGraphicalViewElement
 {
     public CustomGanttViewGraphicalViewElement(RadGanttViewElement ganttView) : base(ganttView)
     {
     }

     protected override Type ThemeEffectiveType     
     { 
         get    
         { 
             return typeof(GanttViewGraphicalViewElement);     
         }
     }
     
     protected override IVirtualizedElementProvider<GanttViewDataItem> CreateElementProvider()
     {
         return new CustomGanttViewVirtualizedElementProvider(this);
     }
 }

 public class CustomGanttViewVirtualizedElementProvider : GanttViewVirtualizedElementProvider
 {
     public CustomGanttViewVirtualizedElementProvider(GanttViewBaseViewElement owner) : base(owner)
     {
     }

     public override IVirtualizedElement<GanttViewDataItem> CreateElement(GanttViewDataItem data, object context)
     {
         IVirtualizedElement<GanttViewDataItem> taskElement = base.CreateElement(data, context) ;
         if (taskElement is GanttViewTaskItemElement)
         {
             FieldInfo fi = typeof(GanttViewVirtualizedElementProvider).GetField("owner", BindingFlags.NonPublic | BindingFlags.Instance);
             GanttViewBaseViewElement owner = fi.GetValue(this) as GanttViewBaseViewElement ;
               
             return new CustomGanttViewTaskItemElement(owner as GanttViewGraphicalViewElement);
         }

         return taskElement;
     }
 }

 public class CustomGanttViewTaskItemElement:GanttViewTaskItemElement
 {
     public CustomGanttViewTaskItemElement(GanttViewGraphicalViewElement owner) : base(owner)
     {
     }

     public override void Synchronize()
     {
         base.Synchronize();
         
         if (this.Tag != null)
         {
             this.TaskElement.Text = this.Tag.ToString();
         }
     }
 }
Approved
Last Updated: 29 Mar 2016 14:24 by ADMIN
Please look at the attached screenshot.

Workaround: you can replace the StackLayoutElement used in the GanttViewTimelineItemBottomStackElement with a DockLayoutPanel for example as follows:

Public Class CustomGanttViewTimelineItemElement
Inherits GanttViewTimelineItemElement
    Public Sub New(data As GanttViewTimelineDataItem, graphicalViewElement As GanttViewGraphicalViewElement)
        MyBase.New(data, graphicalViewElement)

    End Sub
    Dim dock As DockLayoutPanel
    Protected Overrides Sub CreateChildElements()
        MyBase.CreateChildElements()
        dock = New DockLayoutPanel()
        dock.StretchHorizontally = True
        dock.LastChildFill = False
        Me.Children.RemoveAt(Me.Children.Count - 1)
        Me.Children.Add(dock)
    End Sub

    Protected Overrides Sub CalculateItems()
        Me.SuspendLayout()

        Dim cellInfo As GanttTimelineCellsInfo = Me.GraphicalViewElement.TimelineBehavior.GetTimelineCellInfoForItem(Me.Data, Me.GraphicalViewElement.TimelineRange)

        While Me.dock.Children.Count > cellInfo.NumberOfcells
            Me.dock.Children.RemoveAt(0)
        End While

        While Me.dock.Children.Count < cellInfo.NumberOfcells
            Dim element As LightVisualElement = Me.GraphicalViewElement.TimelineBehavior.CreateElement()
            Me.dock.Children.Add(element)
        End While

        Me.TopElement.Text = Me.GraphicalViewElement.TimelineBehavior.GetTimelineTopElementText(Me.Data)

        For i As Integer = 0 To Me.dock.Children.Count - 1
            DirectCast(Me.dock.Children(i), LightVisualElement).Text = Me.GraphicalViewElement.TimelineBehavior.GetTimelineBottomElementText(Me.Data, i + cellInfo.StartIndex)
        Next

        Me.ResumeLayout(True)
    End Sub

    Protected Overrides Function MeasureOverride(availableSize As SizeF) As SizeF
        Dim clientRect As RectangleF = Me.GetClientRectangle(availableSize)
        Dim width As Single = Me.Data.Width - Me.GraphicalViewElement.TimelineContainer.ItemSpacing + availableSize.Width - clientRect.Width

        Me.TopElement.Measure(New SizeF(width, clientRect.Height / 2.0F))
        Me.dock.Measure(New SizeF(width, clientRect.Height / 2.0F))

        Return New SizeF(width, Me.TopElement.DesiredSize.Height + Me.dock.DesiredSize.Height)
    End Function

    Protected Overrides Function ArrangeOverride(finalSize As SizeF) As SizeF
        Dim clientRect As RectangleF = Me.GetClientRectangle(finalSize)

        Dim topRect As New RectangleF(clientRect.X, clientRect.Y, Me.DesiredSize.Width, clientRect.Height / 2.0F)
        Me.TopElement.Arrange(topRect)
        Dim bottomRect As New RectangleF(clientRect.X, topRect.Bottom, Me.DesiredSize.Width, clientRect.Height - topRect.Height)
        Me.dock.Arrange(bottomRect)

        Return clientRect.Size
    End Function
End Class

Public Class CustomGanttViewTimelineElementProvider
Inherits GanttViewTimelineElementProvider

    Public Sub New(owner As GanttViewGraphicalViewElement)
        MyBase.New(owner)

    End Sub
    Public Overrides Function CreateElement(data As GanttViewTimelineDataItem, context As Object) As IVirtualizedElement(Of GanttViewTimelineDataItem)
        Dim element As GanttViewTimelineItemElement = Me.OnItemElementCreating(data)

        Return New CustomGanttViewTimelineItemElement(data, Owner)
    End Function
End Class
Completed
Last Updated: 01 Jun 2015 10:34 by ADMIN
To reproduce:
public RadForm1()
{
    InitializeComponent();
    DataTable tasks = new DataTable("Tasks");
    tasks.Columns.Add("Id", typeof(int));
    tasks.Columns.Add("ParentId", typeof(int));
    tasks.Columns.Add("Title", typeof(string));
    tasks.Columns.Add("Start", typeof(DateTime));
    tasks.Columns.Add("End", typeof(DateTime));
    tasks.Columns.Add("Progress", typeof(decimal));

    DataTable links = new DataTable("Links");
    links.Columns.Add("StartId", typeof(int));
    links.Columns.Add("EndId", typeof(int));
    links.Columns.Add("LinkType", typeof(int));

    tasks.Rows.Add(1, 0, "Summary task title", new DateTime(2010, 10, 8), new DateTime(2010, 10, 18), 30m);
    tasks.Rows.Add(2, 1, "First child task title", new DateTime(2010, 10, 10), new DateTime(2010, 10, 12), 10);
    tasks.Rows.Add(3, 1, "Second child task title", new DateTime(2010, 10, 12), new DateTime(2010, 10, 15), 20m);
    tasks.Rows.Add(4, 1, "Milestone", new DateTime(2010, 10, 15), new DateTime(2010, 10, 15), 0m);

    links.Rows.Add(2, 3, 1);
    links.Rows.Add(3, 4, 1);

    DataSet data = new DataSet();
    data.Tables.Add(tasks.Copy());
    data.Tables.Add(links);

    this.radGridView1.DataSource = tasks;
    radGridView1.BestFitColumns();

    this.radGanttView1.CreateDataItem += radGanttView1_CreateDataItem;
    this.radGanttView1.AllowSummaryEditing = true;
    this.radGanttView1.GanttViewElement.TaskDataMember = "Tasks";
    this.radGanttView1.GanttViewElement.ChildMember = "Id";
    this.radGanttView1.GanttViewElement.ParentMember = "ParentId";
    this.radGanttView1.GanttViewElement.TitleMember = "Title";
    this.radGanttView1.GanttViewElement.StartMember = "Start";
    this.radGanttView1.GanttViewElement.EndMember = "End";
    this.radGanttView1.GanttViewElement.ProgressMember = "Progress";
    this.radGanttView1.GanttViewElement.LinkDataMember = "Links";
    this.radGanttView1.GanttViewElement.LinkStartMember = "StartId";
    this.radGanttView1.GanttViewElement.LinkEndMember = "EndId";
    this.radGanttView1.GanttViewElement.LinkTypeMember = "LinkType";

    this.radGanttView1.GanttViewElement.DataSource = data;

    this.radGanttView1.Columns.Add("Start");
    this.radGanttView1.Columns.Add("End");
    this.radGanttView1.Columns.Add("Progress");

    this.radGanttView1.GanttViewElement.GraphicalViewElement.TimelineStart = new DateTime(2010, 10, 7);
    this.radGanttView1.GanttViewElement.GraphicalViewElement.TimelineEnd = new DateTime(2010, 12, 10);
}
You will notice that the start and end of the summary task are changed in the gantt view.

Workaround:
void radGanttView1_CreateDataItem(object sender, CreateGanttDataItemEventArgs e)
{
    e.Item = new MyGanttViewDataItem();
}

public class MyGanttViewDataItem : GanttViewDataItem
{
    protected override void OnChildAdded(GanttViewDataItem child)
    {
        if (this.Parent != null && !this.GanttViewElement.AllowSummaryEditing)
        {
            base.OnChildAdded(child);
        }
    }

    protected override void OnChildRemoved(GanttViewDataItem child)
    {
        if (this.Parent != null && !this.GanttViewElement.AllowSummaryEditing)
        {
            base.OnChildRemoved(child);
        }
    }
}

Approved
Last Updated: 15 Aug 2017 10:02 by ADMIN
Approved
Last Updated: 11 Oct 2017 07:53 by Longnd
ADMIN
Created by: Dess | Tech Support Engineer, Sr.
Comments: 1
Category: GanttView
Type: Feature Request
1
Add possibility to specify the start and end hours when you display hours in the applied time scale. 
Completed
Last Updated: 06 Nov 2013 09:09 by ADMIN
To reproduce:

Open QSF, go to GanttView, open the Settings example, go to the very last task and change the view mode to month. You will notice that the positions of the tasks are not being updated
Completed
Last Updated: 06 Nov 2013 10:32 by ADMIN
If one applies a TypeConverter with standard values to a property, this type converter is not used to convert these standard values to and from string when they are displayed in a drop down list editor.
Completed
Last Updated: 11 Oct 2013 06:30 by ADMIN
ADMIN
Created by: Georgi I. Georgiev
Comments: 0
Category: GanttView
Type: Bug Report
1
To reproduce:
Add Tasks which appear far after the start of the timeline. You will notice that some of them are not displayed at the right position.
Approved
Last Updated: 15 Aug 2017 09:41 by ADMIN
ADMIN
Created by: Georgi I. Georgiev
Comments: 0
Category: GanttView
Type: Feature Request
1
Add a support for image column in RadGanttView
Completed
Last Updated: 16 Aug 2016 12:27 by ADMIN
Dim data As New DataSet()
Dim tasks As New DataTable("Tasks")
Dim links As New DataTable("Links")
Sub New()
    InitializeComponent()

    tasks.Columns.Add("Id", GetType(Integer))
    tasks.Columns.Add("ParentId", GetType(Integer))
    tasks.Columns.Add("Title", GetType(String))
    tasks.Columns.Add("Start", GetType(DateTime))
    tasks.Columns.Add("End", GetType(DateTime))
    tasks.Columns.Add("Progress", GetType(Decimal))

    links.Columns.Add("StartId", GetType(Integer))
    links.Columns.Add("EndId", GetType(Integer))
    links.Columns.Add("LinkType", GetType(Integer))

    data.Tables.Add(tasks)
    data.Tables.Add(links)
    tasks.Rows.Add(1, 0, "1. Summary task title", New DateTime(2010, 10, 10), New DateTime(2010, 10, 15), 30D)
    tasks.Rows.Add(2, 1, "1.1 Task", New DateTime(2010, 10, 10), New DateTime(2010, 10, 12), 10)
    tasks.Rows.Add(3, 1, "1.2 Task", New DateTime(2010, 10, 12), New DateTime(2010, 10, 15), 20D)
    tasks.Rows.Add(4, 1, "1.3 Task", New DateTime(2010, 10, 10), New DateTime(2010, 10, 11), 20D)
    tasks.Rows.Add(5, 1, "Milestone", New DateTime(2010, 10, 15), New DateTime(2010, 10, 15), 0D)
    tasks.Rows.Add(6, 0, "2. Summary task title", New DateTime(2010, 10, 10), New DateTime(2010, 10, 13), 30D)
    tasks.Rows.Add(7, 6, "2.1 Task", New DateTime(2010, 10, 10), New DateTime(2010, 10, 11), 10)
    links.Rows.Add(2, 3, 1)
    links.Rows.Add(3, 5, 1)

    Bind()
    Me.RadGanttView1.Columns.Add("Start")
    Me.RadGanttView1.Columns.Add("End")
    Me.RadGanttView1.Columns.Add("Id")
    Me.RadGanttView1.Columns.Add("ParentId")

    Me.RadGanttView1.GanttViewElement.GraphicalViewElement.TimelineStart = New DateTime(2010, 10, 9)
End Sub

Private Sub Bind()
    Me.RadGanttView1.GanttViewElement.DataSource = Nothing
    Me.RadGanttView1.GanttViewElement.TaskDataMember = "Tasks"
    Me.RadGanttView1.GanttViewElement.ChildMember = "Id"
    Me.RadGanttView1.GanttViewElement.ParentMember = "ParentId"
    Me.RadGanttView1.GanttViewElement.TitleMember = "Title"
    Me.RadGanttView1.GanttViewElement.StartMember = "Start"
    Me.RadGanttView1.GanttViewElement.EndMember = "End"
    Me.RadGanttView1.GanttViewElement.ProgressMember = "Progress"
    Me.RadGanttView1.GanttViewElement.LinkDataMember = "Links"
    Me.RadGanttView1.GanttViewElement.LinkStartMember = "StartId"
    Me.RadGanttView1.GanttViewElement.LinkEndMember = "EndId"
    Me.RadGanttView1.GanttViewElement.LinkTypeMember = "LinkType"
    Me.RadGanttView1.GanttViewElement.DataSource = data
End Sub

Private Sub RadButtonClick(sender As Object, e As EventArgs) Handles RadButton2.Click
    tasks(3)("ParentId") = 6
    Bind()
End Sub

Workaround: rebind the ganttview after changing the parent.
Approved
Last Updated: 14 Aug 2017 11:53 by ADMIN
ADMIN
Created by: Dess | Tech Support Engineer, Sr.
Comments: 0
Category: GanttView
Type: Bug Report
1
To reproduce: please refer to the attached sample project. Try to edit the title for one of the child tasks in the grid and click the 

Workaround:

private void radGanttView1_ItemChanged(object sender, Telerik.WinControls.UI.GanttViewItemChangedEventArgs e)
{
    IEditableObject editebleObejct = e.Item.DataBoundItem as IEditableObject;
    if (editebleObejct != null)
    {
         editebleObejct.EndEdit();
    }
}
Completed
Last Updated: 27 Apr 2018 15:45 by Dimitar
Workaround: handle the RadGanttView.GraphicalViewItemFormatting event:

    Private Sub GraphicalViewItemFormatting(sender As Object, e As GanttViewGraphicalViewItemFormattingEventArgs)
        Dim taskItem As GanttViewTaskItemElement = TryCast(e.ItemElement, GanttViewTaskItemElement)
        If taskItem IsNot Nothing Then
            taskItem.LeftLinkHandleElement.Opacity = 0
            taskItem.RightLinkHandleElement.Opacity = 0
        End If 
    End Sub
Approved
Last Updated: 15 Aug 2017 10:02 by ADMIN
ADMIN
Created by: Hristo
Comments: 2
Category: GanttView
Type: Feature Request
1

			
Completed
Last Updated: 19 Mar 2018 14:03 by Dimitar
To reproduce:

        public RadForm1()
        {
            InitializeComponent();

            DataSet ds = new DataSet();
            DataTable dt = new DataTable();
            dt.TableName = "Tasks";
            dt.Columns.Add("Id");
            dt.Columns.Add("ParentID");
            dt.Columns.Add("Title");
            dt.Columns.Add("Start", typeof(DateTime));          
            dt.Columns.Add("End", typeof(DateTime));
            dt.Rows.Add("1", "", "Item1", new DateTime(2018,03,16), new DateTime(2018,03,20));
            dt.Rows.Add("2", "1", "child", new DateTime(2018,03,16), new DateTime(2018,03,17));
            dt.Rows.Add("3", "", "Item2", new DateTime(2018,03,16), new DateTime(2018,03,20));
            ds.Tables.Add(dt);

            this.radGanttView1.GanttViewElement.TaskDataMember = "Tasks";
            this.radGanttView1.GanttViewElement.ChildMember = "Id";
            this.radGanttView1.GanttViewElement.ParentMember = "ParentId";
            this.radGanttView1.GanttViewElement.TitleMember = "Title";
            this.radGanttView1.GanttViewElement.StartMember = "Start";
            this.radGanttView1.GanttViewElement.EndMember = "End";
            this.radGanttView1.GanttViewElement.DataSource = ds;
            this.radGanttView1.Columns.Add("Start");
            this.radGanttView1.Columns.Add("End");            
            this.radGanttView1.GanttViewElement.GraphicalViewElement.TimelineStart = new DateTime(2018,03,10);
            this.radGanttView1.GanttViewElement.GraphicalViewElement.TimelineEnd = new DateTime(2018,03,31);
            //"child" item is readonly
            radGanttView1.Items[0].ReadOnly = true; 
        }

Workaround:

        public class CustomBaseGanttViewBehavior : BaseGanttViewBehavior
        {
            protected override void ProcessMouseDownOnTaskElement(GanttGraphicalViewBaseTaskElement element, MouseEventArgs e)
            {
                GanttGraphicalViewBaseItemElement taskItem = element.Parent as GanttGraphicalViewBaseItemElement;
                
                if (e.Button == MouseButtons.Left && !taskItem.Data.ReadOnly)
                {
                    base.ProcessMouseDownOnTaskElement(element, e);
                }
            }
        }
Completed
Last Updated: 26 Mar 2018 14:19 by Dimitar
To reproduce: populate RadGanttView with data and hide some of the columns in a button's Click event: 

    Private Sub RadButton1_Click(sender As Object, e As EventArgs) Handles RadButton1.Click
        Me.RadGanttView1.GanttViewElement.Columns(0).Visible = False
    End Sub

The column is not hidden until you move the splitter.

Workaround:

    Private Sub RadButton1_Click(sender As Object, e As EventArgs) Handles RadButton1.Click
        Me.RadGanttView1.GanttViewElement.Columns(0).Visible = False

        Me.RadGanttView1.GanttViewElement.InvalidateMeasure(True)
        Me.RadGanttView1.GanttViewElement.UpdateLayout()
    End Sub
Completed
Last Updated: 27 Sep 2017 10:52 by ADMIN
How to reproduce: 
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();
        }
    }

Workaround: create a custom RadGanttView
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));
    }
}

Approved
Last Updated: 20 Nov 2017 15:34 by ADMIN
How to reproduce:

1. Run the project 
2. Press the radButton1 
3. Edit description of the first line (Line whose Identifier is TestProject1) 
4. Clicking some other line to end the edit causes the ASSERT to come up 
Completed
Last Updated: 28 Feb 2018 14:35 by ADMIN
See attached video to reproduce.

Workaround:

class MyGantt : RadGanttView
{

    protected override RadGanttViewElement CreateGanttViewElement()
    {
        return new MyGanttElement();
    }
}
class MyGanttElement : RadGanttViewElement
{
    
    protected override void InitializeFields()
    {
        base.InitializeFields();
        ThemeRole = "RadGanttViewElement";
    }

    protected override bool EndEditCore(bool commitChanges)
    {
        if (this.ActiveEditor.Value == null)
        {
            GanttViewDataItem item = this.SelectedItem as GanttViewDataItem;
            this.ActiveEditor.Value = item[CurrentColumn];
           
        }
        return base.EndEditCore(commitChanges);
    }
}


Completed
Last Updated: 26 Jan 2018 11:59 by ADMIN
Workaround: In the case of DateTime columns one can handle the PrintElementFormating event and change text of the print elements with the required format string
private void RadGanttView1_PrintElementFormatting(object sender, Telerik.WinControls.UI.GanttViewPrintElementFormattingEventArgs e)
{
    if (e.PrintContext == GanttViewPrintElementContext.DataCell)
    {
        DateTime date;
        if (e.PrintElement.DrawText && DateTime.TryParse(e.PrintElement.Text, out date))
        {
            e.PrintElement.Text = string.Format("{0:D}", date);
        }
    }
}