Need to include Zoom option in GanttView

1 posts, 0 answers
  1. kanna
    kanna avatar
    28 posts
    Member since:
    Aug 2007

    Posted 20 Sep 2012 Link to this post

    Hi,
    I am using GanttView for Silverlight and i am using collection to Bind the data(not in MVMM method in online example).
    Please let me know how to include the Zoom option to the collection and also i want a suggestion to add the dependency for the below code (binding data to Collection).

    Please find my code as below.
    Regards,
    Kannan

    XAML code:
    <Grid x:Name="LayoutRoot" Background="White">
           <!--<telerik:RadGanttView Name="xGanttView" HorizontalAlignment="Left" Margin="18,1,0,0" VerticalAlignment="Top" Width="Auto" />-->
           <telerik:RadGanttView x:Name="ganttview"  BorderBrush="#FFD6D4D4" Width="1000"
                   BorderThickness="1 0 1 1"
                    Grid.Row="1" Margin="0 6 0 0">
               <telerik:RadGanttView.TimeRulerLines>
                   <telerik:GroupTickLine>
                       <telerik:TickInterval Interval="OneMonth" FormatString="{}{0:MMMM, yyyy}" />
                   </telerik:GroupTickLine>
                   <telerik:MajorTickLine>
                       <telerik:TickInterval Interval="OneDay" FormatString="Day {0:dd}" />
                   </telerik:MajorTickLine>
     
               </telerik:RadGanttView.TimeRulerLines>
     
     
               <telerik:RadGanttView.Columns>
                   <telerik:TreeColumnDefinition MemberBinding="{Binding Title}" Header="" ColumnWidth="5">
                    
                   </telerik:TreeColumnDefinition>
                   <telerik:ColumnDefinition MemberBinding="{Binding Title}" Header="Title" ColumnWidth="120">
                       
                   </telerik:ColumnDefinition>
     
                   <telerik:ColumnDefinition MemberBinding="{Binding Start,Converter={StaticResource TimeToCustomStringConverter}}"  Header="Start"  ColumnWidth="120">
                   </telerik:ColumnDefinition>
                   <telerik:ColumnDefinition MemberBinding="{Binding End,Converter={StaticResource TimeToCustomStringConverter}}" Header="End" ColumnWidth="120">
                    </telerik:ColumnDefinition>
                   <telerik:ColumnDefinition MemberBinding="{Binding Duration,Converter={StaticResource TimeToCustomStringConverter}}" Header="Duration" ColumnWidth="100">
                   </telerik:ColumnDefinition>
                   <telerik:ColumnDefinition MemberBinding="{Binding Progress}" Header="Progress" ColumnWidth="100">
                   </telerik:ColumnDefinition>
                   <!--<telerik:ColumnDefinition MemberBinding="{Binding IsMilestone}" Header="IsMilestone" ColumnWidth="100" />-->
               </telerik:RadGanttView.Columns>
             
           </telerik:RadGanttView>
           
       </Grid>
    C# code:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Animation;
    using System.Windows.Shapes;
    using Telerik.Windows.Controls.GanttView;
    using Telerik.Windows.Controls.Scheduling;
    using System.Collections.ObjectModel;
    using SLGanttChart.WcfRef;
    using Telerik.Windows.Controls;
    namespace SLGanttChart
    {
        public partial class MainPage : UserControl
        {
            public static Collection<WcfRef.ProjectPlan_BO> lstProjectPlan;
            private IRangeGenerator specialSlotsGenerator;
            public static Collection<ProjectPlan> lstProject;
            private readonly static Dictionary<string, Tuple<GanttTask, string>> taskIdToGanttTask = new Dictionary<string, Tuple<GanttTask, string>>();
            private readonly static Dictionary<string, IList<string>> taskToRelation = new Dictionary<string, IList<string>>();
            public MainPage()
            {
                InitializeComponent();
                Random rnd = new Random();
     
                this.Loaded += new RoutedEventHandler(MainPage_Loaded);
               
            }
     
            void wcf_GetProjectPlanForDashboardCompleted(object sender, GetProjectPlanForDashboardCompletedEventArgs e)
            {
                lstProjectPlan = e.Result;
                int i=0;
                int j=0;
     
                DateTime minDate=(from lst in lstProjectPlan select lst.PlannedStartDate).Min();
     
                DateTime maxDate=(from lst in lstProjectPlan select lst.PlannedStartDate).Max();
     
                VisibleRange vr = new VisibleRange(minDate, maxDate);
                ganttview.VisibleRange = vr;
     
                var tasks=new ObservableCollection<GanttTask>();
     
                var gt = new GanttTask();
                //gt.UniqueId = "0";
                gt.Title = "Project Name";
                gt.Start = maxDate;
                gt.End = minDate;
                
                Boolean isDependency=false;
                for (i = 0; i < lstProjectPlan.Count-1; i++)
                {
                    j = i++;
                    if (j <= i)
                    {
                        if (lstProjectPlan[i].ExecutableFlag == "DEPN")
                            isDependency = true;
                        else if(lstProjectPlan[j].ExecutableFlag =="DEPN")
                            isDependency=false;
                    }
                    if (isDependency)
                    {
                        var task1 = new GanttTask();
                        var task2 = new GanttTask();
                        //task1.UniqueId = i + lstProjectPlan[i].ExecutableFlag;
                        if (lstProjectPlan[i].ExecutableFlag == "DEPN")
                            task1.Title = lstProjectPlan[i].ActivityName + "*";
                        else
                            task1.Title = lstProjectPlan[i].ActivityName;
     
                        if (lstProjectPlan[i].PlannedStartDate != null)
                            task1.Start = lstProjectPlan[i].PlannedStartDate;
                        else if (lstProjectPlan[i].RevisedStartDate != null)
                            task1.Start = lstProjectPlan[i].RevisedStartDate;
                        else if (lstProjectPlan[i].ActualStartDate != null)
                            task1.Start = lstProjectPlan[i].ActualStartDate;
     
     
                        if (lstProjectPlan[i].PlannedEndDate != null)
                            task1.End = lstProjectPlan[i].PlannedEndDate;
                        else if (lstProjectPlan[i].RevisedEndDate != null)
                            task1.End = lstProjectPlan[i].RevisedEndDate;
                        else if (lstProjectPlan[i].ActualEndDate != null)
                            task1.End = lstProjectPlan[i].ActualEndDate;
     
                        if (lstProjectPlan[i].ExecutableFlag == "MILE")
                            task1.IsMilestone = true;
     
                        task1.Progress = lstProjectPlan[i].Percentage;
     
     
     
     
                        //task2.UniqueId = j + lstProjectPlan[j].ExecutableFlag;
                        task2.Title = lstProjectPlan[j].ActivityName;
     
                        if (lstProjectPlan[j].PlannedStartDate != null)
                            task2.Start = lstProjectPlan[j].PlannedStartDate;
                        else if (lstProjectPlan[j].RevisedStartDate != null)
                            task2.Start = lstProjectPlan[j].RevisedStartDate;
                        else if (lstProjectPlan[j].ActualStartDate != null)
                            task2.Start = lstProjectPlan[j].ActualStartDate;
     
     
                        if (lstProjectPlan[j].PlannedEndDate != null)
                            task2.End = lstProjectPlan[j].PlannedEndDate;
                        else if (lstProjectPlan[j].RevisedEndDate != null)
                            task2.End = lstProjectPlan[j].RevisedEndDate;
                        else if (lstProjectPlan[j].ActualEndDate != null)
                            task2.End = lstProjectPlan[j].ActualEndDate;
     
                        if (lstProjectPlan[j].ExecutableFlag == "MILE")
                            task2.IsMilestone = true;
     
                        task2.Progress = lstProjectPlan[j].Percentage;
     
                        task2.Dependencies.Add(new Dependency() { FromTask = task1 ,Type=RelationType.FinishFinish});
                        gt.Children.Add(task1);
                        gt.Children.Add(task2);
                    }
                    else
                    {
                        var task1 = new GanttTask();
                        //task1.UniqueId = i + lstProjectPlan[i].ExecutableFlag;
                        task1.Title = lstProjectPlan[i].ActivityName;
     
                        if (lstProjectPlan[i].PlannedStartDate != null)
                            task1.Start = lstProjectPlan[i].PlannedStartDate;
                        else if (lstProjectPlan[i].RevisedStartDate != null)
                            task1.Start = lstProjectPlan[i].RevisedStartDate;
                        else if (lstProjectPlan[i].ActualStartDate != null)
                            task1.Start = lstProjectPlan[i].ActualStartDate;
     
     
                        if (lstProjectPlan[i].PlannedEndDate != null)
                            task1.End = lstProjectPlan[i].PlannedEndDate;
                        else if (lstProjectPlan[i].RevisedEndDate != null)
                            task1.End = lstProjectPlan[i].RevisedEndDate;
                        else if (lstProjectPlan[i].ActualEndDate != null)
                            task1.End = lstProjectPlan[i].ActualEndDate;
     
                        if (lstProjectPlan[i].ExecutableFlag == "MILE")
                            task1.IsMilestone = true;
     
                        task1.Progress = lstProjectPlan[i].Percentage;
                        gt.Children.Add(task1);
                    }
                     
     
                }
                tasks.Add(gt);
     
                ganttview.TasksSource = tasks;
            }
     
            void MainPage_Loaded(object sender, RoutedEventArgs e)
            {
     
                //WCFServiceClient wcf = new WCFServiceClient("BasicHttpBinding_WCFService", "https://qarmtestother.cognizant.com/wcfservice.svc");
                //wcf.GetProjectPlanForDashboardCompleted += new EventHandler<GetProjectPlanForDashboardCompletedEventArgs>(wcf_GetProjectPlanForDashboardCompleted);
                //wcf.GetProjectPlanForDashboardAsync(8347);
     
                //getTasks();
                fillTasks();
             
            }
            public void getTasks()
            {
                var Tasks = new ObservableCollection<GanttTask>();
     
                var d = new DateTime(2012, 3, 1);
     
                for (int i = 0; i < 4; i++)
                {
                    var gt = new GanttTask(d.AddDays(14 * i), d.AddDays(14 * i + 14), "Title " + i.ToString());
                    
                    for (int j = 0; j < gt.Duration.Days; j++)
                    {
                        var childGT = new GanttTask();
                        childGT.Start = gt.Start.AddDays(j);
                        childGT.End = childGT.Start.AddHours(23);
                        childGT.Title = "Child " + i.ToString() + "/" + j.ToString();
                        gt.Children.Add(childGT);
                        if (j > 0)
                        {
                            GanttTask prevGt = gt.Children[j - 1] as GanttTask;
                            prevGt.Dependencies.Add(new Dependency() { FromTask = prevGt });
                            gt.Children.Add(prevGt);
                        }
     
                        
     
                    }
                     
                    Tasks.Add(gt);
                }
     
                ganttview.TasksSource = Tasks;
     
                var majorTickLine = new MajorTickLine();
                majorTickLine.Intervals.Add(new TickInterval { Interval = TimeRulerTickInterval.OneDay });
     
                this.ganttview.TimeRulerLines.Clear();
                this.ganttview.TimeRulerLines.Add(majorTickLine);
     
            }
     
            public void fillTasks()
            {
                lstProject = new Collection<ProjectPlan>();
                ProjectPlan lstPrj = new ProjectPlan();
                lstPrj.Title = "ProjectABC";
                lstPrj.Start = Convert.ToDateTime("12/07/2012");
                lstPrj.End = Convert.ToDateTime("01/10/2012");
                lstPrj.IsDependency = false;
                lstPrj.IsMilestone = false;
                lstPrj.Duration = lstPrj.End.Subtract(lstPrj.Start);
                lstProject.Add(lstPrj);
     
                ProjectPlan lstPrj1 = new ProjectPlan();
                lstPrj1.Title = "Code Drop";
                lstPrj1.Start = Convert.ToDateTime("12/07/2012");
                lstPrj1.End = Convert.ToDateTime("12/07/2012");
                lstPrj1.IsDependency = true;
                lstPrj1.IsMilestone = false;
                lstPrj1.Duration = lstPrj1.End.Subtract(lstPrj1.Start);
                lstProject.Add(lstPrj1);
     
     
     
                ProjectPlan lstPrj2 = new ProjectPlan();
                lstPrj2.Title = "ST Cycle1";
                lstPrj2.Start = Convert.ToDateTime("13/07/2012");
                lstPrj2.End = Convert.ToDateTime("31/08/2012");
                lstPrj2.IsDependency = false;
                lstPrj2.IsMilestone = false;
                lstPrj2.Duration = lstPrj2.End.Subtract(lstPrj2.Start);
                lstProject.Add(lstPrj2);
     
                ProjectPlan lstPrj3 = new ProjectPlan();
                lstPrj3.Title = "ST Cycle2";
                lstPrj3.Start = Convert.ToDateTime("03/09/2012");
                lstPrj3.End = Convert.ToDateTime("29/09/2012");
                lstPrj3.IsDependency = false;
                lstPrj3.IsMilestone = false;
                lstPrj3.Duration = lstPrj3.End.Subtract(lstPrj3.Start);
                lstProject.Add(lstPrj3);
     
     
                ProjectPlan lstPrj4 = new ProjectPlan();
                lstPrj4.Title = "ETOR Report";
                lstPrj4.Start = Convert.ToDateTime("01/10/2012");
                lstPrj4.End = Convert.ToDateTime("29/10/2012");
                lstPrj4.IsDependency = false;
                lstPrj4.IsMilestone = true;
                lstPrj4.Duration = lstPrj4.End.Subtract(lstPrj4.Start);
                lstProject.Add(lstPrj4);
     
     
     
                DateTime dtMax = (from lst in lstProject select lst.Start).Max();
                DateTime dtMin = (from lst in lstProject select lst.End).Min();
     
                //var d = dtMax;
                ganttview.VisibleRange = new VisibleRange(dtMin, dtMax);
                var tasks = new ObservableCollection<GanttTask>();
                var gt = new GanttTask();
                gt.UniqueId = "0";
                gt.Title = lstPrj.Title;
                gt.Start = dtMin;
                gt.End = dtMax;
                gt.Duration = dtMax.Subtract(dtMin);
     
                //gt.Progress=
                //this.SpecialSlotsGenerator = new WeekDaysGenerator();
     
                ganttview.SpecialSlotsGenerator = specialSlotsGenerator;
                int i = 0;
                foreach (ProjectPlan lst in lstProject.Skip(1))
                {
                    var childGT = new GanttTask();
                    childGT.UniqueId = i.ToString();
                    childGT.Start = lst.Start;
                    childGT.End = lst.End;
                    childGT.Title = lst.Title;
                    childGT.Duration = childGT.End.Subtract(childGT.Start);
                    childGT.IsMilestone = lst.IsMilestone;
     
                    gt.Children.Add(childGT);
                    i++;
                }
     
                tasks.Add(gt);
     
     
     
     
                ganttview.TasksSource = tasks;
     
                var majorTickLine = new MajorTickLine();
                majorTickLine.Intervals.Add(new TickInterval { Interval = TimeRulerTickInterval.OneDay });
     
                this.ganttview.TimeRulerLines.Clear();
                this.ganttview.TimeRulerLines.Add(majorTickLine);
             
            }
        }
     
     
        public class ProjectPlan
            {
               public string Title{get;set;}
                public DateTime Start {get;set;}
                public DateTime End { get; set; }
                public double Progress { get; set; }
                public TimeSpan Duration { get; set; }
                public string ExecutableFlag { get; set; }
                public Boolean IsMilestone { get; set; }
                public Boolean IsDependency { get; set; }
            }
     
    }
Back to Top