チュートリアル: 請求書の印刷
LightSwitch のアプリケーションから直接出力できませんが印刷を Silverlight のユーザー コントロールを作成し、実行する LightSwitch の画面に追加します。このチュートリアルでは、Silverlight のユーザー コントロールを作成し、フォームのカスタム コントロールとして使用して、請求書を印刷する方法を示します。
LightSwitch のアプリケーションを作成します。
最初に、貴社との LightSwitch の簡単なアプリケーションを作成し、これらを表示するには、エンティティとリストと詳細の画面を並べ替えます。
アプリケーションを作成するには
メニュー バーで [ファイル]、[新規]、[プロジェクト] の順にクリックします。
[新しいプロジェクト] のダイアログ ボックスで、[LightSwitch] のノードを展開し、[LightSwitch アプリケーション (Visual Basic)] か [LightSwitch アプリケーション (Visual C#)] テンプレートを選択します。
[名前] のテキスト ボックスに、LightSwitchInvoiceを入力し、を [OK] のボタンをクリックします。
[LightSwitchInvoice Designer] のペインで、[新しいテーブルの作成] のリンクを選択します。
[プロパティ] のペインで、[顧客]に [名前] のプロパティの値を設定します。
Entity Designer で、を <Add Property> 選択し、[名前]を入力します。
[種類] の列で、String のデータ型を選択します。
ツール バーで、[新しいテーブル] のボタンをクリックします。
[プロパティ] のペインで、[順序]に [名前] のプロパティの値を設定します。
Entity Designer で、を <Add Property> 選択し、OrderItemを入力します。
[種類] の列で、String のデータ型を選択します。
Entity Designer で、を <Add Property> 選択し、OrderAmountを入力します。
[種類] の列で、Money のデータ型を選択します。
ツール バーで、[リレーションシップ] のボタンをクリックします。
[新しいリレーションシップの追加] ダイアログ ボックスが表示されます。
[名前] の行の には の列で、[顧客] を選択し、[OK] のボタンをクリックします。
[ソリューション エクスプローラー] では、[Customers] のショートカット メニューを開き、[開く] を選択します。
Entity Designer で、を <Add Property> 選択し、OrderTotalを入力します。
[種類] の列で、Money のデータ型を選択します。
[プロパティ] のペインで、[計算されたプロパティである] のチェック ボックスをオンにし、[メソッドの編集] のリンクを選択します。
コード エディターで、OrderTotal_Compute のメソッドの次のコードを追加します:
result = (From items In Orders).Sum(Function(X) X.OrderAmount)
result = (from items in Orders select items).Sum(X => X.OrderAmount);
[ソリューション エクスプローラー] では、[画面] のショートカット メニューを開き、[画面の追加] を選択します。
[新しい画面の追加] のダイアログ ボックスで、[一覧および詳細画面] テンプレートを選択します。
[画面データ] の一覧で、[Customers] を選択します。
[Customer Orders] のチェック ボックスをオンにし、[OK] のボタンをクリックします。
メニュー バーで、[デバッグ]、[デバッグ開始] の順に選択します。
[Customers] のツール バーで、[追加] のボタンをクリックします。
[新しい受注の追加] のダイアログ ボックスが表示されます。
[名前] のテキスト ボックスに、デレック Snyderを入力し、を [OK] のボタンをクリックします。
[注文] のツール バーで、[追加] のボタンをクリックします。
[注文品目] のテキスト ボックスに、ハンマーを入力します。
[注文金額] のテキスト ボックスに、9.95を入力し、を [OK] のボタンをクリックします。
[注文] のツール バーで、[追加] のボタンをクリックします。
[注文品目] のテキスト ボックスに、してを入力します。
[注文金額] のテキスト ボックスに、4.50を入力し、を [OK] のボタンをクリックします。
[アプリケーション] のツール バーで、[保存] を選択し、アプリケーションを閉じます。
Silverlight のユーザー コントロールを作成します。
次に、印刷機能を提供する Silverlight のユーザー コントロールを作成します。
ユーザー コントロールを作成するには
メニュー バーで [ファイル] をクリックし、[追加] を選択し、[新しいプロジェクト] をクリックします。
[新しいプロジェクト] のダイアログ ボックスで、[Visual Basic] か [Visual C#] のノードを展開し、[Silverlight] のノードを選択し、を [Silverlight クラス ライブラリ] テンプレートを選択します。
[名前] のテキスト ボックスに、[PrintControl]を入力し、を [OK] のボタンをクリックします。
[Silverlight クラス ライブラリの追加] のダイアログ ボックスで、[Silverlight 5] が選択されていることを確認し、次に [OK] のボタンを選択します。
[ソリューション エクスプローラー] では、[Class1.vb] または [Class1.cs] のショートカット メニューを開き、[削除] を選択します。
[PrintControl] のショートカット メニューを開き、[追加] を選択し、を [新しいアイテム] を選択します。
[新しい項目の追加] のダイアログ ボックスで、[Silverlight ユーザー コントロール] テンプレートを選択します。
[名前] のテキスト ボックスに、[納品書]を入力し、を [OK] のボタンをクリックします。
メニュー バーで、[ビュー]、[ツールボックス] を選択します。
[ツールボックス] のペインで、[コモン Silverlight コントロール] のノードを展開し、[データグリッド] のコントロールを選択し、デザイン サーフェイスに追加します。
コード エディターで、次のコードで既存の 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 の各列で指定します (この場合、Customers のエンティティの OrderAmount の OrderItem フィールドとフィールド)。
ユーザー コントロールは、次の図のようになります。:
[ソリューション エクスプローラー] では、[Invoice.xaml] のノードを展開して、[Invoice.xaml.vb] または [Invoice.xaml.cs] のショートカット メニューを開き、[開く] を選択します。
コード エディターで、次のコードで既存のコードに置き換えます。:
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; } }
メニュー バーで、[ビルド]、[BuildSolution] を選択します。
ユーザー コントロールを実装します。
最後に、LightSwitch の画面にユーザー コントロールをテストします。
ユーザー コントロールを追加するには
[ソリューション エクスプローラー] では、[CustomersListDetail] の画面のショートカット メニューを開き、[開く] を選択します。
デザイナー画面で、[行のレイアウト] | Customer Details のノードを選択します。
ツール バーで、[レイアウト項目の追加] のリストを開き、[カスタム コントロール] を選択します。
[カスタム コントロールの追加] のダイアログ ボックスで、[参照の追加] のボタンをクリックします。
[参照マネージャー] のダイアログ ボックスで、[ソリューション] のノードを展開し、[PrintControl] のチェック ボックスをオンに [OK] のボタンをクリックします。
[カスタム コントロールの追加] のダイアログ ボックスで、[PrintControl] のノードを展開し、[納品書] のコントロールを選択し、を [OK] のボタンをクリックします。
画面エディターで、[カスタム コントロール] | Screen Content ノードを選択し、ドラッグして Data Grid | [注文] のノードとして表示されます。
[プロパティ] のペインで、[納品書]に [名前] のプロパティの値を設定します。
[サイズ変更] のグループで、[水平方向の配置] と [垂直方向の配置] の [伸縮] のオプション ボタンを選択します。
メニュー バーで、アプリケーションを実行するには [デバッグ]、[デバッグの開始] を選択します。
実行中のアプリケーションでは、[印刷] のボタンをクリックします。
Windows [印刷] のダイアログ ボックスが表示されたら、プリンターを選択できます。