• Telerik RadGanttView示例


    TicksToTimeSpanConverter.cs
    using System;
    using System.Net;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Documents;
    using System.Windows.Ink;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Animation;
    using System.Windows.Shapes;
    using System.Windows.Data;
    using System.Globalization;
    
    namespace SGSGHome.Views.TaskTrace
    {
        public class TicksToTimeSpanConverter : IValueConverter
        {
            public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
            {
                return TimeSpan.FromTicks((long)(double)value);
            }
    
            public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
            {
                throw new NotImplementedException();
            }
        }
    }
    <UserControl x:Class="SGSGHome.Views.TaskTrace.TaskGantt"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"
        xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"
        xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"
        xmlns:local="clr-namespace:SGSGHome.Views.TaskTrace"
        d:DesignWidth="1200" d:DesignHeight="600">
        <UserControl.Resources>
            <local:TicksToTimeSpanConverter x:Key="TicksToTimeSpanConverter" />
        </UserControl.Resources>
        <Grid x:Name="LayoutRoot">
            <Grid.RowDefinitions>
                <RowDefinition Height="30" />
                <RowDefinition Height="*" />
            </Grid.RowDefinitions>
            <StackPanel Grid.Row="0" Margin="3" Orientation="Horizontal" HorizontalAlignment="Left" VerticalAlignment="Center">
                <TextBlock VerticalAlignment="Center">时间范围:从</TextBlock>
                <sdk:DatePicker Name="FromDate"></sdk:DatePicker>
                <TextBlock VerticalAlignment="Center">至</TextBlock>
                <sdk:DatePicker Name="ToDate"></sdk:DatePicker>
                <TextBlock VerticalAlignment="Center" Margin="3">项目名称:</TextBlock>
                <ComboBox Name="cbProject" Width="150" Height="20"></ComboBox>
                <Button Name="btnOK" Content="确定" Width="50" Height="22" Click="btnOK_Click" Margin="3,0,0,0"></Button>
    
                <!-- ZOOM slider-->
                <TextBlock VerticalAlignment="Center" Margin="3,0,0,0">放大</TextBlock>
                <Border BorderBrush="Gray" BorderThickness="1" Margin="2">
                <telerik:RadSlider  VerticalAlignment="Center" Width="120" x:Name="PixelLength"
                        Minimum="10000000" Maximum="60000000000" Value="35000000000"/>
                </Border>
                <TextBlock VerticalAlignment="Center">缩小</TextBlock>
            </StackPanel>
            <telerik:RadGanttView x:Name="ganttView" 
                HorizontalAlignment="Stretch" 
                VerticalAlignment="Stretch" 
                MouseLeftButtonDown="ganttView_MouseLeftButtonDown" 
                Grid.Row="1"
                PixelLength="{Binding Value, ElementName=PixelLength, Converter={StaticResource TicksToTimeSpanConverter}}">
                <telerik:RadGanttView.Columns>
                    <telerik:TreeColumnDefinition Header="任务名称" />
                    <telerik:ColumnDefinition MemberBinding="{Binding AssignTo}" Header="负责人" ColumnWidth="200" />
                    <telerik:ColumnDefinition MemberBinding="{Binding ProgressString}" Header="任务进度" ColumnWidth="80" />
                    <telerik:ColumnDefinition MemberBinding="{Binding HasDoc}" Header="文档"/>
                    <telerik:ColumnDefinition MemberBinding="{Binding Start,StringFormat=yyyy-MM-dd}" Header="开始时间" ColumnWidth="100" />
                    <telerik:ColumnDefinition MemberBinding="{Binding End,StringFormat=yyyy-MM-dd}" Header="预计完成时间" ColumnWidth="100" />
                    <telerik:ColumnDefinition MemberBinding="{Binding ActualFinishDate,StringFormat=yyyy-MM-dd}" Header="实际完成时间" ColumnWidth="100" />
                </telerik:RadGanttView.Columns>
            </telerik:RadGanttView>
        </Grid>
    </UserControl>
    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;
    
    namespace SGSGHome.Views.TaskTrace
    {
        public class GanttTaskEx : GanttTask
        {
            public string AssignTo { get; set; }
            public string ProgressString { get; set; }
            public string PreTaskName { get; set; }
            public DateTime? ActualFinishDate { get; set; }
            public string HasDoc { get; set; }
            public GanttTaskEx() { }
            public GanttTaskEx(DateTime start, DateTime end, string title) : base(start, end, title) { }
        }
    
        public partial class TaskGantt : UserControl
        {
            public bool IsManager { get; set; }
    
            public ObservableCollection<TaskTraceService.TaskTrace> TaskTraceList { get; set; }
            public ObservableCollection<TaskTraceService.v_TaskDocCount> TaskDocCountList { get; set; }
            public GanttTaskEx Root { get; set; }
            TaskTraceService.TaskServiceClient client;
            CoreService.CoreServiceClient xClient;
    
            public TaskGantt()
            {
                InitializeComponent();
                this.Loaded += new RoutedEventHandler(TaskGantt_Loaded);
            }
    
            void TaskGantt_Loaded(object sender, RoutedEventArgs e)
            {
                FromDate.SelectedDate = DateTime.Now.AddDays(-15);
                ToDate.SelectedDate = DateTime.Now.AddDays(15);
                this.TaskTraceList = new ObservableCollection<TaskTraceService.TaskTrace>();
    
                xClient = new CoreService.CoreServiceClient();
                xClient.HasRightCompleted += new EventHandler<CoreService.HasRightCompletedEventArgs>(xClient_HasRightCompleted);
    
                client = new TaskTraceService.TaskServiceClient();
                client.GetTaskByProjectNoCompleted += new EventHandler<TaskTraceService.GetTaskByProjectNoCompletedEventArgs>(client_GetTaskByProjectNoCompleted);
                client.GetTaskByMemberCompleted += new EventHandler<TaskTraceService.GetTaskByMemberCompletedEventArgs>(client_GetTaskByMemberCompleted);
                client.GetProjectNoListCompleted += new EventHandler<TaskTraceService.GetProjectNoListCompletedEventArgs>(client_GetProjectNoListCompleted);
                client.GetProjectNoListAsync();
    
                client.GetTaskDocCountCompleted += new EventHandler<TaskTraceService.GetTaskDocCountCompletedEventArgs>(client_GetTaskDocCountCompleted);
                client.GetTaskDocCountAsync();
    
            }
    
            void client_GetTaskDocCountCompleted(object sender, TaskTraceService.GetTaskDocCountCompletedEventArgs e)
            {
                TaskDocCountList = e.Result;
            }
    
            void client_GetTaskByProjectNoCompleted(object sender, TaskTraceService.GetTaskByProjectNoCompletedEventArgs e)
            {
                TaskTraceList = e.Result;
                if (e.Result.Count > 0)
                {
                    FromDate.SelectedDate = e.Result.Min(x => x.StartDate).AddDays(-1);
                    ToDate.SelectedDate = e.Result.Max(x => x.FinishDate).AddDays(1);
                    this.Root = new GanttTaskEx(e.Result.Min(x => x.StartDate), e.Result.Max(x => x.FinishDate), ((TaskTraceService.ProjectBuild)cbProject.SelectedItem).ProjectName);
                    AddChild(TaskTraceList, null, Root);
                }
                else
                {
                    Root = null;
                }
            }
    
            void xClient_HasRightCompleted(object sender, CoreService.HasRightCompletedEventArgs e)
            {
                IsManager = AppContext.IsSupervisor || e.Result;
                cbProject_SelectionChanged(null, null);
            }
    
            void client_GetProjectNoListCompleted(object sender, TaskTraceService.GetProjectNoListCompletedEventArgs e)
            {
                if (e.Result.Count > 0)
                {
                    cbProject.ItemsSource = e.Result;
                    cbProject.DisplayMemberPath = "ProjectName";
                    cbProject.SelectedValuePath = "ProjectNo";
                    cbProject.SelectedIndex = 0;
                    cbProject.SelectionChanged += new SelectionChangedEventHandler(cbProject_SelectionChanged);
    
                    xClient.HasRightAsync(AppContext.LogonUserID, "SGSGHome.Views.TaskTrace.TaskManage", Operation.GetTagName(Operation.Tag.All));
                }
            }
    
            void cbProject_SelectionChanged(object sender, SelectionChangedEventArgs e)
            {
                if (IsManager)
                {
                    client.GetTaskByProjectNoAsync(cbProject.SelectedValue.ToString());
                }
                else
                {
                    client.GetTaskByMemberAsync(AppContext.LogonUserName, cbProject.SelectedValue.ToString());
                }
            }
    
            void client_GetTaskByMemberCompleted(object sender, TaskTraceService.GetTaskByMemberCompletedEventArgs e)
            {
                TaskTraceList = e.Result;
                if (e.Result.Count > 0)
                {
                    FromDate.SelectedDate = e.Result.Min(x => x.StartDate).AddDays(-1);
                    ToDate.SelectedDate = e.Result.Max(x => x.FinishDate).AddDays(1);
                    this.Root = new GanttTaskEx(e.Result.Min(x => x.StartDate), e.Result.Max(x => x.FinishDate), ((TaskTraceService.ProjectBuild)cbProject.SelectedItem).ProjectName);
                    AddChild(TaskTraceList, null, Root);
                }
                else
                {
                    Root = null;
                }
            }
    
            private void ganttView_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
            {
                if (e.ClickCount == 2)
                {
                    var r = ganttView.SelectedItem as GanttTaskEx;
                    if (r != null && r.UniqueId != null)
                    {
                        var w = new OutputDoc();
                        w.TaskTrace = TaskTraceList.Single(x => x.TaskID == long.Parse(r.UniqueId));
                        w.CurrentUser = AppContext.LogonUserName;
                        w.Show();
                    }
                }
            }
    
            private void btnOK_Click(object sender, RoutedEventArgs e)
            {
                if (FromDate.SelectedDate != null && ToDate.SelectedDate != null)
                {
                    if (FromDate.SelectedDate.Value < ToDate.SelectedDate.Value)
                    {
                        if (Root != null)
                        {
                            ganttView.VisibleRange = new VisibleRange(FromDate.SelectedDate.Value, ToDate.SelectedDate.Value);
                            ganttView.TasksSource = new ObservableCollection<GanttTaskEx>() { Root };
                        }
                        else
                        {
                            MessageBox.Show("没有数据!", "提示", MessageBoxButton.OK);
                        }
                    }
                }
            }
    
            void AddChild(IList<TaskTraceService.TaskTrace> dataList, long? preTaskID, GanttTaskEx preTask)
            {
                var filterList = dataList.Where(x => x.PreTaskID == preTaskID).ToList();
    
                foreach (var tt in filterList)
                {
                    var childTask = new GanttTaskEx()
                    {
                        Start = tt.StartDate,
                        End = tt.FinishDate,
                        Title = tt.TaskName,
                        ActualFinishDate = tt.ActualFinishDate,
                        AssignTo = tt.AssignTo,
                        Progress = (double)tt.CompletePercent,
                        ProgressString = ((double)tt.CompletePercent).ToString() + "%",
                        UniqueId = tt.TaskID.ToString(),
                        PreTaskName = tt.PreTaskName,
                        HasDoc = TaskDocCountList.Any(x => x.TaskID == tt.TaskID) ? "" : ""
                    };
    
                    preTask.Children.Add(childTask);
                    var childrenList = TaskTraceList.Where(x => x.PreTaskID == tt.TaskID).ToList();
                    if (childrenList.Count > 0)
                    {
                        AddChild(childrenList, tt.TaskID, childTask);
                    }
                }
            }
        }
    }
  • 相关阅读:
    ATA/SATA/SCSI/SAS/FC总线简介
    RAID卡
    解读Gartner《2015年度新兴技术成熟度曲线报告》
    linux 下 取进程占用内存(MEM)最高的前10个进程
    网站用域名能访问,用域名IP不能访问的原因分析
    iis7下iis安全狗不能用怎么办(安装iis6兼容性)
    4M宽带一般最大的下载速度是多少?
    U盘安装操作系统
    windows7实现打印机共享的方法
    windows7系统下如何安装windows xp系统(无法识别硬盘,删除隐藏分区)
  • 原文地址:https://www.cnblogs.com/ncore/p/2784607.html
Copyright © 2020-2023  润新知