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);
}
}
}