2019年01月21日 11:57
原创作品,转载时请务必以超链接形式标明文章原始出处,否则将追究法律责任。

本节说一下简单的图表,当然作为不怎么挣钱的项目,你就能简就减。大多数时候在公司做事,你是一定要精益求精,尽善尽美。因为那是你体现你实力的时候,你做的烂了,大家就不怎么信任你。但是在接的私活方面,因为别人会压价,你报价1万,人家压到8000,否则不给你做。这些活有时候会被一些小年轻做了,那些人技术不管咋样,但是有精力,能折腾。折腾出来的东西也许能用。所以8000就8000呗,羊毛出在羊身上。1万块的实现和8000的实现自然不是一个档次,能用就是标准。

先看一下图,无图无真相。

image.png

我们就随便看一个,疗养情况统计。

image.png

这里展示本年度没有参加疗养的人员和参加疗养的人员的比例,当你点击参加疗养的部分时,就会展示这些人的信息。

首先我们看一下代码

<Base:WindowBase x:Class="HealthyInfomation.Windows.UserControl.RecuperationInformationAnalysis"
        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"
        xmlns:local="clr-namespace:HealthyInfomation.Windows.UserControl"
        xmlns:Base="clr-namespace:HealthyInformation.FrameWork;assembly=HealthyInformation.FrameWork"
        mc:Ignorable="d"
        xmlns:converter="clr-namespace:HealthyInfomation.Converter"
        ResizeMode="NoResize"
        WindowStartupLocation="CenterScreen"
        Title="疗养信息统计" Height="700" Width="650">
    <Base:WindowBase.Resources>
        <converter:SexUIConverter x:Key="SexUIConverter"></converter:SexUIConverter>
    </Base:WindowBase.Resources>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition Height="Auto"></RowDefinition>
        </Grid.RowDefinitions>
        <Grid x:Name="AnalysisChart" Height="350" Width="600"></Grid>
        <DataGrid x:Name="DG_Detail"
                  Grid.Row="1"
                  RowHeight="25"
                  Width="600"
                  Height="300"
                  HorizontalScrollBarVisibility="Auto"
                  AutoGenerateColumns="False" 
                  CanUserAddRows="False"
                  CanUserDeleteRows="False"
                  Cursor="Hand"
                  Margin="10,0,10,0"
                  AlternatingRowBackground="#CCCCCC">
            <DataGrid.Columns>
                <DataGridTextColumn Header="姓名" Binding="{Binding Name, Mode=OneWay}" MinWidth="70"/>
                <DataGridTextColumn Header="性别" Binding="{Binding Sex, Mode=OneWay,Converter={StaticResource SexUIConverter}, ConverterParameter=1}" MinWidth="40"/>
                <DataGridTextColumn Header="部门" Binding="{Binding TroopsType, Mode=OneWay}" MinWidth="100"/>
                <DataGridTextColumn Header="职别" Binding="{Binding JobTitle, Mode=OneWay}" MinWidth="80"/>
                <DataGridTextColumn Header="疗养院" Binding="{Binding SanatoriumName, Mode=OneWay}" MinWidth="120"/>
                <DataGridTextColumn Header="计划入院日期" Binding="{Binding HospitalEnterDate, Mode=OneWay,StringFormat=yyyy-MM-dd HH:mm:ss}" MinWidth="120"/>
                <DataGridTextColumn Header="计划出院日期" Binding="{Binding HospitalLeaveDate, Mode=OneWay,StringFormat=yyyy-MM-dd HH:mm:ss}" MinWidth="120"/>
            </DataGrid.Columns>
        </DataGrid>
    </Grid>
</Base:WindowBase>

UI代码so easy,不再赘述。为了让该页面剧中屏幕,需设置WindowStartupLocation = 'CenterScreen'。至于这个饼图,我们是用代码画出来的。

public partial class RecuperationInformationAnalysis : WindowBase
{
    RecuperationInformationFacade facade;
    public RecuperationInformationAnalysis()
    {
        InitializeComponent();
        facade = new RecuperationInformationFacade(this);
        InitData();
    }

    private async void InitData()
    {
        var result = await facade.GetRecuperationAnalysisCountResult();
        this.AnalysisChart.CreateChartPie(string.Concat(DateTime.Now.Year, "年度疗养人员统计"), new List<string> { "未参加疗养人员", "参加疗养人员" }
        , new List<string> { (result.TotalCont - result.AppendCount).ToString(), result.AppendCount.ToString() }, 600, 340, dataPoint_MouseLeftButtonDown);
    }

    private async void dataPoint_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        if ((sender as DataPoint).Tag.ToString() == "参加疗养人员")
        {
            var result = await facade.GetRecuperationAnalysisResult();
            this.DG_Detail.ItemsSource = result;
        }
    }
}

拿到数据,绘制饼图。点击饼图,在下方DataGrid就会展示详细人员信息。看一下这个绘制饼图的类,当然从网上抄来的,自己研究这个没必要。

public static void CreateChartPie(this Grid grid, string name, List<string> valuex, List<string> valuey, int width = 500, int height = 300, MouseButtonEventHandler handler = null)
{
    //创建一个图标
    Chart chart = new Chart();

    //设置图标的宽度和高度
    chart.Width = width;
    chart.Height = height;
    chart.Margin = new Thickness(0, 5, 0, 5);
    //是否启用打印和保持图片
    chart.ToolBarEnabled = true;

    //设置图标的属性
    chart.ScrollingEnabled = false;//是否启用或禁用滚动
    chart.View3D = true;//3D效果显示

    //创建一个标题的对象
    Title title = new Title();

    //设置标题的名称
    title.Text = name;
    title.Foreground = new SolidColorBrush(Colors.Orange);
    title.Padding = new Thickness(0, 10, 5, 0);

    //向图标添加标题
    chart.Titles.Add(title);

    // 创建一个新的数据线。               
    DataSeries dataSeries = new DataSeries();

    // 设置数据线的格式
    dataSeries.RenderAs = RenderAs.Pie;//柱状Stacked

    // 设置数据点              
    DataPoint dataPoint;
    for (int i = 0; i < valuex.Count; i++)
    {
        // 创建一个数据点的实例。                   
        dataPoint = new DataPoint();
        // 设置X轴点                    
        dataPoint.AxisXLabel = valuex[i];

        dataPoint.LegendText = "##" + valuex[i];
        //设置Y轴点                   
        dataPoint.YValue = double.Parse(valuey[i]);
        dataPoint.Tag = valuex[i];
        //添加一个点击事件        
        if (handler != null)
        {
            dataPoint.MouseLeftButtonDown += handler;
        }
        //添加数据点                   
        dataSeries.DataPoints.Add(dataPoint);
    }

    // 添加数据线到数据序列。                
    chart.Series.Add(dataSeries);

    //将生产的图表增加到Grid,然后通过Grid添加到上层Grid.           

    grid.Children.Add(chart);
}

OK,再看一个界面。

image.png

今天就到这里,想要demo必须掏银子。

发表评论
匿名  
用户评论
暂无评论