Completed
Last Updated: 15 Mar 2018 12:26 by Dimitar
How to reproduce:
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        new RadControlSpyForm().Show();

        this.radGanttView.GanttViewElement.GraphicalViewElement.OnePixelTime = new TimeSpan(6, 0, 0);

        this.radGanttView.GanttViewElement.GraphicalViewElement.TimelineRange = TimeRange.YearHalves;

        this.radGanttView.GanttViewElement.GraphicalViewElement.TimelineStart = new DateTime(2016, 12, 25);
        this.radGanttView.GanttViewElement.GraphicalViewElement.TimelineEnd = new DateTime(2017, 1, 27);


        this.AddTasks();
    }

    private void AddTasks()
    {
        //Setup data items
        GanttViewDataItem item1 = new GanttViewDataItem();
        item1.Start = new DateTime(2017, 1, 1);
        item1.End = new DateTime(2017, 1, 20);
        item1.Progress = 30m;
        item1.Title = "Summary task.1. title";

        GanttViewDataItem subItem11 = new GanttViewDataItem();
        subItem11.Start = new DateTime(2017, 1, 1);
        subItem11.End = new DateTime(2017, 1, 20);
        subItem11.Progress = 10m;
        subItem11.Title = "Sub-task.1.1 title";

        GanttViewDataItem subItem12 = new GanttViewDataItem();
        subItem12.Start = new DateTime(2017, 1, 1);
        subItem12.End = new DateTime(2017, 1, 20);
        subItem12.Progress = 20m;
        subItem12.Title = "Sub-task.1.2 title";

        GanttViewDataItem subItem13 = new GanttViewDataItem();
        subItem13.Start = new DateTime(2017, 1, 5);
        subItem13.End = new DateTime(2017, 1, 20);
        subItem13.Progress = 20m;
        subItem13.Title = "Sub-task.1.3 title";

        //Add subitems
        item1.Items.Add(subItem11);
        item1.Items.Add(subItem12);
        item1.Items.Add(subItem13);

        this.radGanttView.Items.Add(item1);

        GanttViewTextViewColumn titleColumn = new GanttViewTextViewColumn("Title");
        GanttViewTextViewColumn startColumn = new GanttViewTextViewColumn("Start");
        GanttViewTextViewColumn endColumn = new GanttViewTextViewColumn("End");

        this.radGanttView.GanttViewElement.Columns.Add(titleColumn);
        this.radGanttView.GanttViewElement.Columns.Add(startColumn);
        this.radGanttView.GanttViewElement.Columns.Add(endColumn);
    }
}

Workaround: 

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        new RadControlSpyForm().Show();

        this.radGanttView.GanttViewElement.GraphicalViewElement.OnePixelTime = new TimeSpan(6, 0, 0);

        this.radGanttView.GanttViewElement.GraphicalViewElement.TimelineRange = TimeRange.YearHalves;
        this.radGanttView.GanttViewElement.GraphicalViewElement.TimelineBehavior = new CustomTimelineBehavior();

        this.radGanttView.GanttViewElement.GraphicalViewElement.TimelineStart = new DateTime(2016, 12, 25);
        this.radGanttView.GanttViewElement.GraphicalViewElement.TimelineEnd = new DateTime(2017, 1, 27);


        this.AddTasks();
    }

    private void AddTasks()
    {
        //Setup data items
        GanttViewDataItem item1 = new GanttViewDataItem();
        item1.Start = new DateTime(2017, 1, 1);
        item1.End = new DateTime(2017, 1, 20);
        item1.Progress = 30m;
        item1.Title = "Summary task.1. title";

        GanttViewDataItem subItem11 = new GanttViewDataItem();
        subItem11.Start = new DateTime(2017, 1, 1);
        subItem11.End = new DateTime(2017, 1, 20);
        subItem11.Progress = 10m;
        subItem11.Title = "Sub-task.1.1 title";

        GanttViewDataItem subItem12 = new GanttViewDataItem();
        subItem12.Start = new DateTime(2017, 1, 1);
        subItem12.End = new DateTime(2017, 1, 20);
        subItem12.Progress = 20m;
        subItem12.Title = "Sub-task.1.2 title";

        GanttViewDataItem subItem13 = new GanttViewDataItem();
        subItem13.Start = new DateTime(2017, 1, 5);
        subItem13.End = new DateTime(2017, 1, 20);
        subItem13.Progress = 20m;
        subItem13.Title = "Sub-task.1.3 title";

        //Add subitems
        item1.Items.Add(subItem11);
        item1.Items.Add(subItem12);
        item1.Items.Add(subItem13);

        this.radGanttView.Items.Add(item1);

        GanttViewTextViewColumn titleColumn = new GanttViewTextViewColumn("Title");
        GanttViewTextViewColumn startColumn = new GanttViewTextViewColumn("Start");
        GanttViewTextViewColumn endColumn = new GanttViewTextViewColumn("End");

        this.radGanttView.GanttViewElement.Columns.Add(titleColumn);
        this.radGanttView.GanttViewElement.Columns.Add(startColumn);
        this.radGanttView.GanttViewElement.Columns.Add(endColumn);
    }
}

public class CustomTimelineBehavior : BaseGanttViewTimelineBehavior
{
    public override DateTime AdjustedTimelineStart
    {
        get
        {
            if (this.GraphicalViewElement.TimelineRange == TimeRange.YearHalves)
            {
                DateTime result = this.GraphicalViewElement.TimelineStart;
                int halfYearDay = DateTime.IsLeapYear(result.Year) ? 366 / 2 : 365 / 2;
                if (result.DayOfYear < halfYearDay)
                {
                    return new DateTime(result.Year, 1, 1);
                }
                else
                {
                    return new DateTime(result.Year, 1, 1).AddDays(halfYearDay);
                }
            }

            return base.AdjustedTimelineStart;
        }
    }

    public override DateTime AdjustedTimelineEnd
    {
        get
        {
            if (this.GraphicalViewElement.TimelineRange == TimeRange.YearHalves)
            {
                DateTime result = this.GraphicalViewElement.TimelineEnd;
                int halfYearDay = DateTime.IsLeapYear(result.Year) ? 366 / 2 : 365 / 2;
                if (result.DayOfYear < halfYearDay)
                {
                    return new DateTime(result.Year, 1, 1).AddDays(halfYearDay + 1);
                }
                else
                {
                    return new DateTime(result.Year, 1, 1).AddYears(1);
                }
            }

            return base.AdjustedTimelineEnd;
        }
    }
}
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);
        }
    }
}
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: 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));
    }
}

Completed
Last Updated: 14 Dec 2017 13:38 by ADMIN
To reproduce: click (mouse down) on a task but then release the mouse button off the task. It then stays selected even when I click on other tasks. You can repeat this over and over and end up with every task as "selected" as shown in the video.

Workaround:

 AddHandler Me.RadGanttView1.GraphicalViewItemFormatting, AddressOf GraphicalViewItemFormatting

Private Sub GraphicalViewItemFormatting(sender As Object, e As GanttViewGraphicalViewItemFormattingEventArgs)
    Dim taskItem As GanttViewTaskItemElement = TryCast(e.ItemElement, GanttViewTaskItemElement)
    If taskItem IsNot Nothing AndAlso taskItem.TaskElement.VisualState.Contains(".MouseDown") AndAlso Not taskItem.Selected Then
        taskItem.TaskElement.IsMouseDown = False
    End If
End Sub
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
Completed
Last Updated: 15 Aug 2017 10:20 by ADMIN
ADMIN
Created by: Dess | Tech Support Engineer, Principal
Comments: 0
Category: GanttView
Type: Bug Report
0
To reproduce: please refer to the attached sample project and follow the steps in the gif file.

Workaround: 

private void radGanttView1_ContextMenuOpening(object sender, Telerik.WinControls.UI.GanttViewContextMenuOpeningEventArgs e)
{
    foreach (RadMenuItem item in e.Menu.Items)
    {
        if (item.Text == "&Delete")
        {
            item.MouseDown -= item_MouseDown;
            item.MouseDown += item_MouseDown;
        }
    }
}

private void item_MouseDown(object sender, MouseEventArgs e)
{
    this.radGanttView1.GanttViewElement.BeginUpdate();

    if (this.radGanttView1.SelectedItem.Parent == null)
    {
        while (this.radGanttView1.SelectedItem.Items.Count > 0)
        {
            this.radGanttView1.SelectedItem.Items.RemoveAt(0);
        }
    }
    this.radGanttView1.GanttViewElement.EndUpdate();
}
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.
Completed
Last Updated: 18 May 2016 09:29 by ADMIN
ADMIN
Created by: Dess | Tech Support Engineer, Principal
Comments: 2
Category: GanttView
Type: Bug Report
0
To reproduce: use the following code snippet and try to drag an item or click over a task item:

private ViewModel viewModel;

public Form1()
{
    InitializeComponent();
    viewModel = new ViewModel();
    viewModel.Init();
    viewModel.DateChanged += ViewModelOnDateChanged;

    this.radGanttView1.Ratio = 0.3F;
    this.radGanttView1.SplitterWidth = 7;
    this.radGanttView1.TitleMember = "Name";
    this.radGanttView1.ChildMember = "Id";
    this.radGanttView1.EndMember = "End";
    this.radGanttView1.ParentMember = "ParentId";
    this.radGanttView1.ProgressMember = "Progress";
    this.radGanttView1.StartMember = "Start";
    this.radGanttView1.TaskDataMember = "TimingRows";
    this.radGanttView1.LinkDataMember = "LinkRows";
    this.radGanttView1.LinkStartMember = "StartId";
    this.radGanttView1.LinkEndMember = "EndId";
    this.radGanttView1.LinkTypeMember = "LinkType";

    this.radGanttView1.DataSource = viewModel;

    this.radGanttView1.Click += radGanttView1_Click;
}

private void radGanttView1_Click(object sender, EventArgs e)
{ 
    this.radGanttView1.DataSource = null;
    this.radGanttView1.DataSource = viewModel;
}

private void radGanttView1_MouseEnter(object sender, EventArgs e)
{
    this.radGanttView1.DataSource = null;
    this.radGanttView1.DataSource = viewModel;
}

private void ViewModelOnDateChanged(object sender, EventArgs eventArgs)
{
    BeginInvoke(new Action(() =>
    {
        this.radGanttView1.DataSource = null;
        this.radGanttView1.DataSource = viewModel;
    }));
}

public class ViewModel
{
    public event EventHandler DateChanged;

    public BindingList<TimingRow> TimingRows { get; set; }

    public BindingList<LinkRow> LinkRows { get; set; }

    public ViewModel()
    {
        TimingRows = new BindingList<TimingRow>();
        LinkRows = new BindingList<LinkRow>();
    }

    public void Init()
    {
        AddRow(1, 0, "group", 3, 12);
        AddRow(2, 1, "Test1", 3, 4);
        AddRow(3, 1, "Test2", 7, 8);
        AddLink(2, 3, 1);
    }

    private void AddLink(int p1, int p2, int p3)
    {
        var link = new LinkRow(p1, p2, p3);
        LinkRows.Add(link);
    }

    private void AddRow(int id, int parentId, string name, int addDays, int howLong)
    {
        var row = new TimingRow
        {
            Start = DateTime.Today.AddDays(addDays),
            End = DateTime.Today.AddDays(addDays + howLong),
            Id = id,
            ParentId = parentId,
            Name = name
        };
        row.DateChanged += RowOnDateChanged;
        TimingRows.Add(row);
    }

    private void RowOnDateChanged(object sender, EventArgs eventArgs)
    {
        if (DateChanged != null)
            DateChanged(this, EventArgs.Empty);
    }
}

public class TimingRow
{
    public event EventHandler DateChanged;

    private DateTime start;

    public string Name { get; set; }

    public int Id { get; set; }

    public int ParentId { get; set; }

    public decimal Progress
    {
        get
        {
            return 0;
        }
    }

    public virtual DateTime Start
    {
        get
        {
            return start;
        }
        set
        {
            if (start == value)
                return;
            if (DateChanged != null)
                DateChanged(this, EventArgs.Empty);
            start = value;
        }
    }

    public virtual DateTime End { get; set; }
}

public class LinkRow
{
    public int StartId { get; set; }

    public int EndId { get; set; }

    public int LinkType { get; set; }

    public LinkRow(int startId, int endId, int linkType)
    {
        this.StartId = startId;
        this.EndId = endId;
        this.LinkType = linkType;
    }
}
---------------------------------------------------------------------------------
WORKAROUND:

private void radGanttView1_CreateDataItem(object sender, Telerik.WinControls.UI.CreateGanttDataItemEventArgs e)
{
    e.Item = new CustomGanttViewDataItem();
}

public class CustomGanttViewDataItem : GanttViewDataItem
{
    protected override void OnNotifyPropertyChanged(PropertyChangedEventArgs e)
    {
        if (this.GanttViewElement != null)
        {
            base.OnNotifyPropertyChanged(e);
        }
    }
}

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

    protected override RadGanttViewElement CreateGanttViewElement()
    {
        return new CustomRadGanttViewElement();
    }
}

public class CustomRadGanttViewElement : RadGanttViewElement
{
    protected override Type ThemeEffectiveType
    {
        get
        {
            return typeof(RadGanttViewElement);
        }
    }

    protected override GanttViewGraphicalViewElement CreateGraphicalViewElement(RadGanttViewElement ganttView)
    {
        return new CustomGanttViewGraphicalViewElement(ganttView);
    }
}

public class CustomGanttViewGraphicalViewElement : GanttViewGraphicalViewElement
{
    protected override Type ThemeEffectiveType
    {
        get
        {
            return typeof(GanttViewGraphicalViewElement);
        }
    }

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

    protected override IVirtualizedElementProvider<GanttViewDataItem> CreateElementProvider()
    {
        return new CustomGanttViewVirtualizedElementProvider(this);
    }
}

public class CustomGanttViewVirtualizedElementProvider : GanttViewVirtualizedElementProvider
{
    GanttViewBaseViewElement owner;

    public CustomGanttViewVirtualizedElementProvider(GanttViewBaseViewElement owner) : base(owner)
    {
        this.owner = owner;
    }

    public override IVirtualizedElement<GanttViewDataItem> CreateElement(GanttViewDataItem data, object context)
    {
        GanttViewBaseItemElement element = this.OnItemElementCreating(data);

        if (element != null)
        {
            return element;
        }

        if (owner is GanttViewTextViewElement)
        {
            return new GanttViewTextItemElement(owner as GanttViewTextViewElement);
        }
        else
        {
            if (data.Items.Count > 0)
            {
                return new GanttViewSummaryItemElement(this.owner as GanttViewGraphicalViewElement);
            }
            else if (data.Start == data.End)
            {
                return new GanttViewMilestoneItemElement(this.owner as GanttViewGraphicalViewElement);
            }

            return new CustomGanttViewTaskItemElement(this.owner as GanttViewGraphicalViewElement);
        }
    }
}

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

    public override void Synchronize()
    {
        if (this.Data.GanttViewElement != null)
        {
            base.Synchronize();
        }
    }
}
Completed
Last Updated: 29 Apr 2016 07:31 by ADMIN
ADMIN
Created by: Hristo
Comments: 0
Category: GanttView
Type: Bug Report
0
How to reproduce:
1. Subscribe to radGanttView DoubleClick event.
2. Double click at any point on ragGanttView

Woraround:
1. Create a custom RadGanttView and override the OnMouseDoubleClick method
public class MyRadGanttView : RadGanttView
{

    protected override void OnMouseDoubleClick(MouseEventArgs e)
    {
        if (this.GanttViewElement.ProcessDoubleClick(e))
        {
            return;
        }

        MouseEventHandler item = (MouseEventHandler)base.Events[typeof(Control).GetField("EventMouseDoubleClick", BindingFlags.NonPublic | BindingFlags.Static).GetValue(this)];
        if (item != null)
        {
            item(this, e);
        }
    }
}

Completed
Last Updated: 11 Jan 2016 10:48 by ADMIN
How to reproduce: refer to the attached project

Workaround: reset the data source
private void Button1_Click(object sender, EventArgs e)
{
	this.RadGanttView1.DataSource = null;

	//TODO: This line of code loads data into the 'WeddingPlannerDataSet.Tasks' table. You can move, or remove it, as needed.
	this.TasksTableAdapter.Fill(this.WeddingPlannerDataSet.Tasks);
	//TODO: This line of code loads data into the 'WeddingPlannerDataSet.Links' table. You can move, or remove it, as needed.
	this.LinksTableAdapter.Fill(this.WeddingPlannerDataSet.Links);

	this.RadGanttView1.GanttViewElement.DataSource = this.WeddingPlannerDataSet 
}
Completed
Last Updated: 05 Aug 2015 11:35 by ADMIN
If one subscribes to the TimelineItemElementCreating and provides custom item elements for the timeline these elements are not used and default item elements are used instead.

WORKAROUND:

Create a custom element provider:

public class CustomGanttViewTimelineElementProvider : GanttViewTimelineElementProvider
{
    public CustomGanttViewTimelineElementProvider(GanttViewGraphicalViewElement owner)
        : base(owner)
        { }

    public override IVirtualizedElement<GanttViewTimelineDataItem> CreateElement(GanttViewTimelineDataItem data, object context)
        {
            GanttViewTimelineItemElement element = this.OnItemElementCreating(data);

            if (element != null)
            {
                return element;
            }

            return new GanttViewTimelineItemElement(data, this.Owner);
        }
}

and assign it to the timeline container element provider:

this.radGanttView1.GanttViewElement.GraphicalViewElement.TimelineContainer.ElementProvider = new CustomGanttViewTimelineElementProvider(this.radGanttView1.GanttViewElement.GraphicalViewElement);
Completed
Last Updated: 13 Apr 2016 13:18 by ADMIN
To reproduce: 
1. Drag and drop RadGanttView on the form
2. Populate with tasks and set the ReadOnly property to true. 
3. Run the application and you will see that you can add links

Workaround: 
Disable adding of links:
void radGanttView2_LinkAdding(object sender, GanttViewLinkAddingEventArgs e)
{
    e.Cancel = true;
}
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);
        }
    }
}

Completed
Last Updated: 30 Jan 2015 09:13 by ADMIN
To reproduce: 
1. Drag and drop RadGanttView
2. Add summary task with 3 sub tasks
3. Set the ReadOnly property to true
4. Run the form and try to move summary task. The user should not be able to move summary task or any other task when is in read only mode. 

Workaround: 
You can set the following properties: 
this.radGanttView1.ReadOnly = true;
this.radGanttView1.AllowSummaryEditing = false;
Completed
Last Updated: 20 Jan 2015 14:49 by ADMIN
To reproduce: 
 public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        this.radGanttView1.GanttViewElement.GraphicalViewElement.TimelineStart = new DateTime(2010, 10, 9);
        this.radGanttView1.GanttViewElement.GraphicalViewElement.TimelineEnd = new DateTime(2010, 12, 10);

        this.FillGanttViewWithData();
    }

    private void radGanttView1_SelectedItemChanged(object sender, GanttViewSelectedItemChangedEventArgs e)
    {
        var dateToFocus = e.Item.Start;
        this.radGanttView1.GanttViewElement.GraphicalViewElement.ScrollTo(dateToFocus);
    }

    private void FillGanttViewWithData()
    {
        //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);
    }
}

Workaround: 
public class CustomGanttView : RadGanttView
{
    protected override RadGanttViewElement CreateGanttViewElement()
    {
        return new CustomGanttViewElement();
    }

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

public class CustomGanttViewElement : RadGanttViewElement
{
    protected override GanttViewGraphicalViewElement CreateGraphicalViewElement(RadGanttViewElement ganttView)
    {
        return new CustomGanttViewGraphicalViewElement(this);
    }

    protected override Type ThemeEffectiveType
    {
        get { return typeof(RadGanttViewElement); }
    }
}

public class CustomGanttViewGraphicalViewElement : GanttViewGraphicalViewElement
{

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

    protected override Type ThemeEffectiveType
    {
        get { return typeof(GanttViewGraphicalViewElement); }
    }

    public override bool ScrollTo(DateTime dateTime)
    {
        if (dateTime < this.TimelineBehavior.AdjustedTimelineStart || dateTime > this.TimelineBehavior.AdjustedTimelineEnd)
        {
            return false;
        }

        float halfViewWidth = (float)this.ViewElement.Size.Width / 2f;
        float x = (float)((dateTime - this.TimelineBehavior.AdjustedTimelineStart).TotalSeconds / this.OnePixelTime.TotalSeconds);
        x -= halfViewWidth;

        if (x < 0)
        {
            this.TimelineScroller.Scrollbar.Value = this.TimelineScroller.Scrollbar.Minimum;
        }
        else if (x > this.TimelineScroller.Scrollbar.Maximum)
        {
            this.TimelineScroller.Scrollbar.Value = this.TimelineScroller.Scrollbar.Maximum - this.TimelineScroller.Scrollbar.LargeChange;
        }
        else
        {
            this.TimelineScroller.Scrollbar.Value = (int)x;
        }

        return true;
    }
}
Completed
Last Updated: 19 Feb 2015 17:19 by ADMIN
To reproduce:
- Add enough items so that the vertical scroll is shown.
- Scroll so the first item is not visible.
- Move one of the visible items.
Completed
Last Updated: 10 Nov 2014 12:26 by ADMIN
To reproduce: use the following code snippet and perform the described steps below:

Sub New()
    InitializeComponent()

    PopulateData()
End Sub

Private Sub PopulateData()

    Dim tasks As New DataTable("Tasks")
    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))

    Dim links As New DataTable("Links")
    links.Columns.Add("StartId", GetType(Integer))
    links.Columns.Add("EndId", GetType(Integer))
    links.Columns.Add("LinkType", GetType(Integer))

    Dim data As New DataSet()
    data.Tables.Add(tasks)
    data.Tables.Add(links)

    tasks.Rows.Add(1, 0, "Summary task title", New DateTime(2010, 10, 10), New DateTime(2010, 10, 15), 30D)
    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), 20D)
    tasks.Rows.Add(4, 1, "Milestone", New DateTime(2010, 10, 15), New DateTime(2010, 10, 15), 0D)

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

    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

    Me.RadGanttView1.Columns.Clear()
    Me.RadGanttView1.Columns.Add("Start")
    Me.RadGanttView1.Columns.Add("End")
    Me.RadGanttView1.GanttViewElement.GraphicalViewElement.TimelineStart = New DateTime(2010, 10, 9)
    Me.RadGanttView1.GanttViewElement.GraphicalViewElement.TimelineEnd = New DateTime(2010, 12, 10)
End Sub

Private Sub RadButton1_Click(sender As Object, e As EventArgs) Handles RadButton1.Click
    Dim selected = Me.RadGanttView1.SelectedItem.Title

    Me.RadGanttView1.DataSource = Nothing
    PopulateData()

    Dim result = FindDataItem(selected, Me.RadGanttView1.Items)

    If result IsNot Nothing Then
        Me.RadGanttView1.SelectedItem = result
    End If
End Sub

Dim found = Nothing
Private Function FindDataItem(selected As String, items As GanttViewDataItemCollection) As GanttViewDataItem

    For Each item As GanttViewDataItem In items
        If item.Title = selected Then
            Return item
        End If

        Dim itm As GanttViewDataItem = FindDataItem(selected, item.Items)

        If itm IsNot Nothing Then
            Return itm
        End If
    Next
    Return Nothing
End Function

1.Select a random task item
2.Click the button to rebind and restore the selection
As a result you will encounter a NullReferenceException.

Workaround: set the SelectedItem property to null/Nothing before rebinding