演练:打印发票

不能直接从 LightSwitch 应用程序打印,但是,您可以创建实现打印的 Silverlight 用户控件并将其添加到 LightSwitch 屏幕。本演练演示如何通过创建 Silverlight 用户控件并将其打印发票为自定义控件在窗体。

创建 LightSwitch 应用程序

首先,使用客户创建一个简单的 LightSwitch 应用程序和 orders 实体和列表和详细屏幕显示它们。

创建应用程序

  1. 在菜单栏上,选择**“文件”“新建**、“项目”

  2. 新建项目 对话框中,展开 LightSwitch 节点,然后选择 LightSwitch 应用程序 (Visual Basic)LightSwitch 应用程序 (Visual C#) 模板。

  3. 名称 文本框中,输入 LightSwitchInvoice,然后选择 确定 按钮。

  4. LightSwitchInvoice 设计器 窗口中,选择 创建新表 链接。

  5. 属性 窗口中,将 名称 属性的值设置为 客户。

  6. 在实体设计器中,选择 <Add Property> 该链接,然后输入 名称。

  7. 类型 列中,选择 String 数据类型。

  8. 在工具栏上,选择 新建表 按钮。

  9. 属性 窗口中,将 名称 属性的值设置为 顺序。

  10. 在实体设计器中,选择 <Add Property> 该链接,然后输入 OrderItem。

  11. 类型 列中,选择 String 数据类型。

  12. 在实体设计器中,选择 <Add Property> 该链接,然后输入 OrderAmount。

  13. 类型 列中,选择 Money 数据类型。

  14. 在工具栏上,选择 关系 按钮。

    将显示**“添加新关系”**对话框。

  15. 名称 行的列中,选择 客户,然后选择 确定 按钮。

  16. 解决方案资源管理器,打开 客户的快捷菜单,然后选择 打开

  17. 在实体设计器中,选择 <Add Property> 该链接,然后输入 OrderTotal。

  18. 类型 列中,选择 Money 数据类型。

  19. 属性 窗口中,选择 为计算属性 复选框,然后选择 编辑方法 链接。

  20. 在代码编辑器中,添加 OrderTotal_Compute 方法的以下代码:

    result = (From items In Orders).Sum(Function(X) X.OrderAmount)
    
    result = (from items in Orders select items).Sum(X => X.OrderAmount);
    
  21. 解决方案资源管理器,打开 屏幕的快捷菜单,然后选择 添加屏幕

  22. 添加新屏幕 对话框中,选择 “列表和详细信息”屏幕 模板。

  23. 屏幕数据 列表中,选择 客户

  24. 选择 客户订单 复选框,然后选择 确定 按钮。

  25. 在菜单栏上,依次选择**“调试”“启动调试”**。

  26. 客户 工具栏上,选择 添加 按钮。

    添加新订单 出现对话框。

  27. 名称 文本框中,输入 德里克斯奈德,然后选择 确定 按钮。

  28. 订单 工具栏上,选择 添加 按钮。

  29. 订单项 文本框中,输入 锤子。

  30. 订单金额 文本框中,输入 9.95,然后选择 确定 按钮。

  31. 订单 工具栏上,选择 添加 按钮。

  32. 订单项 文本框中,输入 钉子。

  33. 订单金额 文本框中,输入 4.50,然后选择 确定 按钮。

  34. 应用程序 工具栏上,选择 保存,然后关闭应用程序。

创建 Silverlight 用户控件

接下来,创建提供打印功能的 Silverlight 用户控件。

创建用户控件

  1. 在菜单栏上,选择**“文件”菜单上,“添加”“新建项目”**。

  2. 新建项目 对话框中,展开 Visual BasicVisual C# 节点,选择 Silverlight 节点,然后选择 Silverlight 类库 模板。

  3. 名称 文本框中,输入 PrintControl,然后选择 确定 按钮。

  4. 添加 Silverlight 类库 对话框中,确保 Silverlight 5 中选择,然后选择 确定 按钮。

  5. 解决方案资源管理器,打开 Class1.vbClass1.cs的快捷菜单,然后选择 删除

  6. 打开 PrintControl的快捷菜单,选择 添加,然后选择 新建项

  7. 添加新项 对话框中,选择 Silverlight 用户控件 模板。

  8. 名称 文本框中,输入 发票,然后选择 确定 按钮。

  9. 在菜单栏上,依次选择 查看工具箱

  10. 工具箱 窗口中,展开 常用 Silverlight 控件 节点,选择 数据网格 控件,并将其添加到设计图面。

  11. 在代码编辑器中,用下面的代码替换现有的 XAML 代码:

    <UserControl
        xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="https://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="https://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:sdk="https://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk" x:Class="PrintControl.Invoice"
        mc:Ignorable="d" d:DesignWidth="474" Height="278">
    <StackPanel>
    
            <Button Content="Print" x:Name="btnPrint" Click="PrintButton_Click" />
    
            <Border BorderThickness="1" BorderBrush="#FF504F4F">
    
    
    
                <Grid x:Name="LayoutRoot">
    
                    <Grid.ColumnDefinitions>
    
                        <ColumnDefinition Width="0.02*"/>
    
                        <ColumnDefinition Width="0.2*"/>
    
                        <ColumnDefinition Width="0.5*"/>
    
                        <ColumnDefinition Width="0.1*"/>
    
                        <ColumnDefinition Width="0.18*"/>
    
                    </Grid.ColumnDefinitions>
    
                    <Grid.RowDefinitions>
    
                        <RowDefinition Height="0.053*"/>
    
                        <RowDefinition Height="0.08*"/>
    
                        <RowDefinition Height="0.533*"/>
    
                        <RowDefinition Height="0.133*"/>
    
                        <RowDefinition Height="0.2*"/>
    
                    </Grid.RowDefinitions>
    
                    <sdk:DataGrid ItemsSource="{Binding Screen.Orders, Mode=OneWay}"
    
                AutoGenerateColumns="False" Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="2" >
    
                        <sdk:DataGrid.Columns>
    
                            <sdk:DataGridTextColumn Binding="{Binding OrderItem}" CanUserSort="True" DisplayIndex="0"
    
                Header="Order Item" MaxWidth="100" MinWidth="50" Visibility="Visible" Width="Auto"/>
    
                            <sdk:DataGridTextColumn Binding="{Binding OrderAmount, StringFormat=C}" CanUserSort="True" DisplayIndex="1"
    
                Header="Order Amount" MaxWidth="100" MinWidth="50" Visibility="Visible" Width="Auto"/>
    
                        </sdk:DataGrid.Columns>
    
                    </sdk:DataGrid>
    

    此 XAML 代码定义控件的布局。<sdk:DataGrid.Columns> 部分指定将出现在 DataGrid 的每一列 (在这种情况下,OrderItem 和 OrderAmount 字段从 Customers 实体)。

    用户控件应与下图类似:

    Silverlight 用户控件

  12. 解决方案资源管理器,展开 Invoice.xaml 节点,打开 Invoice.xaml.vbInvoice.xaml.cs的快捷菜单,然后选择 打开

  13. 在代码编辑器中,用下面的代码替换现有代码:

    Imports System.Windows.Printing
    
    Partial Public Class Invoice
        Inherits UserControl
        Private WithEvents pd As PrintDocument
        Public Sub New()
            InitializeComponent()
            pd = New PrintDocument
            InvoiceDate.Text = DateTime.Today.ToShortDateString()
        End Sub
        Private Sub PrintButton_Click(ByVal sender As Object, _
                ByVal e As RoutedEventArgs)
            pd.Print(String.Format("Invoice Date: {0}", DateTime.Today.ToShortDateString()))
        End Sub
        Private Sub pd_PrintPage(ByVal sender As Object, _
                ByVal e As PrintPageEventArgs) Handles pd.PrintPage
            e.PageVisual = LayoutRoot
        End Sub
    
    End Class
    
    using System.Windows.Printing;
    
    public partial class Invoice : UserControl
    {
    private PrintDocument withEventsField_pd;
    private PrintDocument pd {
    get { return withEventsField_pd; }
    set {
    if (withEventsField_pd != null) {
    withEventsField_pd.PrintPage -= pd_PrintPage;
    }
    withEventsField_pd = value;
    if (withEventsField_pd != null) {
    withEventsField_pd.PrintPage += pd_PrintPage;
    }
    }
    }
    public Invoice()
    {
    InitializeComponent();
    pd = new PrintDocument();
    InvoiceDate.Text = DateTime.Today.ToShortDateString();
    }
    private void PrintButton_Click(object sender, RoutedEventArgs e)
    {
    pd.Print(string.Format("Invoice Date: {0}", DateTime.Today.ToShortDateString()));
    }
    private void pd_PrintPage(object sender, PrintPageEventArgs e)
    {
    e.PageVisual = LayoutRoot;
    }
    }
    
  14. 在菜单栏上,依次选择 生成BuildSolution

使用用户控件

最后,您将用户控件添加到 LightSwitch 屏幕并测试程序。

添加用户控件

  1. 解决方案资源管理器,打开 CustomersListDetail 屏幕的快捷菜单,然后选择 打开

  2. 在屏幕设计器中,选择 行布局|Customer Details 节点。

  3. 在工具栏上,打开 添加布局项 列表,然后选择 自定义控件

  4. 添加自定义控件 对话框中,选择 添加引用 按钮。

  5. 引用管理器 对话框中,展开 解决方案 节点,选择 PrintControl 复选框,然后选择 确定 按钮。

  6. 添加自定义控件 对话框中,展开 PrintControl 节点,选择 发票 控件,然后选择 确定 按钮。

  7. 在屏幕上编辑,选择 自定义控件|Screen Content 节点,并拖动它,以便显示 Data Grid|订单 节点。

  8. 属性 窗口中,将 名称 属性的值设置为 发票。

  9. 调整大小 组中,选择 水平对齐垂直对齐拉伸 选项按钮。

  10. 在菜单栏上,依次选择 调试启动调试 运行应用程序。

  11. 在运行的应用程序,请选择 打印 按钮。

    在窗口 打印 对话框出现后,可以选择打印机。

请参见

其他资源

LightSwitch 中的报告和打印