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

本节我们看一下疗养信息管理界面,无图无真相,先上图。

image.png

UI代码很easy,如下,我就不多说了。

<Base:WindowBase x:Class="HealthyInfomation.Windows.RecuperationPlan"
        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"
        mc:Ignorable="d"
        WindowStartupLocation="CenterScreen"
        ResizeMode="NoResize"
        xmlns:Base="clr-namespace:HealthyInformation.FrameWork;assembly=HealthyInformation.FrameWork"
        Title="疗养计划" Height="610" Width="800">
    <Grid Margin="5">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition Height="*"></RowDefinition>
            <RowDefinition Height="Auto"></RowDefinition>
        </Grid.RowDefinitions>
        <Grid Grid.Row="0">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto"></ColumnDefinition>
                <ColumnDefinition Width="Auto"></ColumnDefinition>
                <ColumnDefinition Width="Auto"></ColumnDefinition>
                <ColumnDefinition Width="Auto"></ColumnDefinition>
                <ColumnDefinition Width="Auto"></ColumnDefinition>
                <ColumnDefinition Width="Auto"></ColumnDefinition>
                <ColumnDefinition Width="Auto"></ColumnDefinition>
            </Grid.ColumnDefinitions>
            <TextBlock Text="疗养院:" Grid.Column="0"></TextBlock>
            <ComboBox Grid.Column="1" 
                      Width="150" 
                      SelectedValue="{Binding SanatoriumID,Mode=TwoWay}"
                      ItemsSource="{Binding SanatoriumList,Mode=OneWay}"
                      DisplayMemberPath="Name"
                      SelectedValuePath="TransactionNumber"></ComboBox>
            <TextBlock Text="开始时间:" Grid.Column="2" Margin="20,0,0,0"></TextBlock>
            <DatePicker Width="100" Grid.Column="3" SelectedDate="{Binding StartDate,Mode=TwoWay}"></DatePicker>
            <TextBlock Text="结束时间:" Grid.Column="4" Margin="5,0,0,0"></TextBlock>
            <DatePicker Width="100" Grid.Column="5" SelectedDate="{Binding EndDate,Mode=TwoWay}"></DatePicker>
            <Button Command="{Binding SearchCommand,Mode=OneWay}" Content="查询" Grid.Column="6" Margin="20,0,0,0" Style="{DynamicResource btn-primary}"></Button>
        </Grid>
        <DataGrid x:Name="DG_AviationMedicine"
                  Grid.Row="1" 
                  AutoGenerateColumns="False" 
                  CanUserAddRows="False"
                  CanUserDeleteRows="False"
                  Cursor="Hand"
                  Margin="0,5,0,0"
                  AlternatingRowBackground="#CCCCCC"
                  SelectedItem="{Binding SelectedRecuperationPlan,Mode=TwoWay}"
                  ItemsSource="{Binding RecuperationPlanList}">
            <DataGrid.Columns>
                <DataGridTextColumn Header="疗养院名称" Binding="{Binding SanatoriumName, Mode=OneWay}" MinWidth="120"/>
                <DataGridTextColumn Header="带队领导"  Binding="{Binding LeaderName, Mode=OneWay}"/>
                <DataGridTextColumn Header="责任医师" Binding="{Binding AviationMedicineName, Mode=OneWay}"/>
                <DataGridTextColumn Header="入院时间" Binding="{Binding StartDate, Mode=OneWay,StringFormat=yyyy-MM-dd}"/>
                <DataGridTextColumn Header="出院时间" Binding="{Binding EndDate,Mode=OneWay,StringFormat=yyyy-MM-dd}" MinWidth="200"/>
                <DataGridTemplateColumn Header="操作" Width="250">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Horizontal">
                                <Button Command="{Binding ModifyCommand,Mode=OneWay,RelativeSource={RelativeSource AncestorType={x:Type Window}}}" CommandParameter="{Binding}" Content="修改" Style="{StaticResource btn-info}"></Button>
                                <Button Command="{Binding RemoveCommand,Mode=OneWay,RelativeSource={RelativeSource AncestorType={x:Type Window}}}" CommandParameter="{Binding}" Content="删除" Style="{StaticResource btn-danger}" Margin="5,0,0,0"></Button>
                                <Button Command="{Binding PrintCommand,Mode=OneWay,RelativeSource={RelativeSource AncestorType={x:Type Window}}}" CommandParameter="{Binding}" Content="打印" Style="{StaticResource btn-primary}" Margin="5,0,0,0"></Button>
                            </StackPanel>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
            </DataGrid.Columns>
        </DataGrid>
        <Grid Grid.Row="2" Margin="0,5,0,5">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"></ColumnDefinition>
            </Grid.ColumnDefinitions>
            <StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
                <Button Command="{Binding NewCommand,Mode=OneWay}" Content="新增"  Style="{StaticResource btn-success}" HorizontalAlignment="Left"></Button>
            </StackPanel>
        </Grid>
    </Grid>
</Base:WindowBase>

依然是MVVM模式,后台cs代码我就不贴出来了,我们主要看一下修改界面。

image.png

大家注意了,这里有个打印按钮,那么打印在WPF中是怎么实现的呢?其实就是使用微软的report。我们总共设计了三个报表,一个主报表,两个子报表。

image.png

空勤人员列表

image.png

随行人员列表

image.png

接下来我们看一下后台cs代码

private async void BuildReportData(int key)
{
    response = await this.facade.GetRecuperationInformation(key);
    ReportViewer.LocalReport.SubreportProcessing += LocalReport_SubreportProcessing;
    ReportDataSource reportDataSource = new ReportDataSource();
    reportDataSource.Name = "DataSet1";
    reportDataSource.Value = new List<RecuperationInformationResponse> { response };
    ReportViewer.LocalReport.DataSources.Add(reportDataSource);
    ReportViewer.LocalReport.ReportEmbeddedResource = "HealthyInfomation.Report.Recuperation.rdlc";
    ReportViewer.ProcessingMode = ProcessingMode.Local;
    ReportViewer.RefreshReport();
}

private void LocalReport_SubreportProcessing(object sender, SubreportProcessingEventArgs e)
{
    if (e.ReportPath == "RecuperationMember")
    {
        response.RecuperationMemberList = this.ProcessMemberList(response.RecuperationMemberList);
        e.DataSources.Add(new ReportDataSource("DataSet1", response.RecuperationMemberList));
    }
    else
    {
        response.RecuperationAccompanyList = this.ProcessMemberList(response.RecuperationAccompanyList);
        e.DataSources.Add(new ReportDataSource("DataSet2", response.RecuperationAccompanyList));
    }
}

先设置主报表的数据源,再设置子报表的数据源,子报表在事件LocalReport_SubreportProcessing中处理。

OK,就是这么简单我们看一下效果

image.png

看起来还不错,好的今天就到这里,想要demo的必须掏银子。

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