Condividi tramite


Procedura dettagliata: stampa di una fattura da un'applicazione LightSwitch

Non è possibile stampare direttamente da un'applicazione LightSwitch, ma è possibile creare un controllo utente Silverlight che distribuisce la stampa e aggiungerlo a una schermata di LightSwitch. Questa procedura illustra come stampare una fattura creando un controllo utente di Silverlight e usandolo come controllo personalizzato in un form.

Creare l'applicazione LightSwitch

Innanzitutto, creare una semplice applicazione LightSwitch con le entità Cliente e Ordine e una schermata Dettagli e elenco per visualizzare.

Per creare l'applicazione

  1. Nella barra dei menu scegliere File, Nuovo, Progetto.

  2. Nella finestra di dialogo Nuovo progetto espandere il nodo di LightSwitch e quindi scegliere il modello Applicazione desktop LightSwitch (Visual Basic) o Applicazione desktop LightSwitch (Visual C#).

  3. Nella casella di testo Nome immettere LightSwitchInvoice, quindi scegliere il pulsante OK.

  4. Nella finestra Finestra di progettazione LightSwitchInvoice scegliere il collegamento Crea nuova tabella.

  5. Nella finestra Proprietà impostare il valore della proprietà Nome su Cliente.

  6. Nella finestra di progettazione scegliere il collegamento <Aggiungi proprietà>, quindi immettere Name.

  7. Nella colonna Tipo scegliere il tipo di dati String.

  8. Nella barra degli strumenti scegliere il pulsante Nuova tabella.

  9. Nella finestra Proprietà impostare il valore della proprietà Nome su Ordine.

  10. Nella finestra di progettazione scegliere il collegamento <Aggiungi proprietà> e quindi immettere OrderItem.

  11. Nella colonna Tipo scegliere il tipo di dati String.

  12. Nella finestra di progettazione scegliere il collegamento <Aggiungi proprietà> e quindi immettere OrderAmount.

  13. Nella colonna Tipo scegliere il tipo di dati Money.

  14. Nella barra degli strumenti scegliere Relazione.

    Verrà visualizzata la finestra di dialogo Aggiungi nuova relazione.

  15. Nella colonna A dell'elenco Nome scegliere Cliente, quindi fare clic sul pulsante OK.

  16. In Esplora soluzioni aprire il menu di scelta rapida per Clienti, quindi scegliere Apri.

  17. Nella finestra di progettazione scegliere il collegamento <Aggiungi proprietà> e quindi immettere OrderTotal.

  18. Nella colonna Tipo scegliere il tipo di dati Money.

  19. Nella finestra Proprietà selezionare la casella di controllo Calcolato, quindi selezionare il collegamento Modifica metodo.

  20. Nell'editor del codice aggiungere il codice seguente per il metodo OrderTotal_Compute:

    result = (From items In Orders).Sum(Function(X) X.OrderAmount)
    
    result = (from items in Orders select items).Sum(X => X.OrderAmount);
    
  21. In Esplora soluzioni aprire il menu di scelta rapida per Schermate, quindi scegliere Aggiungi schermata.

  22. Nella finestra di dialogo Aggiungi nuova schermata scegliere il modello Schermata di elenco e dettagli.

  23. Nell'elenco Dati della schermata scegliere Clienti.

  24. Selezionare la casella di controllo Customer Orders, quindi scegliere Fine.

  25. In Progettazione schermata scegliere il pulsante Aggiungi elemento di dati sulla barra degli strumenti.

  26. Nella finestra di dialogo Aggiungi elemento di dati scegliere Proprietà locale e nella casella di testo Nome immettere InvoiceDate, quindi scegliere il pulsante OK.

  27. Sulla barra degli strumenti aprire l'elenco Scrivi codice e scegliere CustomersListDetail_Created.

  28. Nell'editor di codice aggiungere il codice seguente per il metodo CustomersListDetail_Created:

    InvoiceDate = DateTime.Today.ToShortDateString()
    
    InvoiceDate == DateTime.Today.ToShortDateString();
    
  29. Nella barra dei menu scegliere Debug, Avvia debug.

  30. Nella barra degli strumenti Clienti scegliere il pulsante Aggiungi.

    Viene visualizzata la finestra di dialogo Add New Order.

  31. Nella casella di testo Nome immettere Derek Snyder, quindi scegliere il pulsante OK.

  32. Nella barra degli strumenti Orders scegliere il pulsante Aggiungi.

  33. Nella casella di testo Order Item immettere Hammer.

  34. Nella casella di testo Order Amount immettere 9.95, quindi scegliere il pulsante OK.

  35. Nella barra degli strumenti Orders scegliere il pulsante Aggiungi.

  36. Nella casella di testo Order Item immettere Nails.

  37. Nella casella di testo Order Amount immettere 4,50, quindi scegliere il pulsante OK.

  38. Nella barra degli strumenti Applicazione scegliere Salva, quindi chiudere l'applicazione.

Creare il controllo utente Silverlight

Quindi, creare un controllo utente Silverlight che fornisce funzionalità di stampa.

Per creare un controllo utente

  1. Nella barra dei menu scegliere File, Aggiungi, Nuovo progetto.

  2. Nella finestra di dialogo Nuovo progetto espandere il nodo Visual Basic o Visual C#, scegliere il nodo Silverlight e quindi scegliere il modello Libreria di classi Silverlight.

  3. Nella casella di testo Nome immettere PrintControl, quindi scegliere il pulsante OK.

  4. In Esplora soluzioni aprire il menu di scelta rapida per Class1.vb o Class1.cs e quindi scegliere Elimina.

  5. Aprire il menu di scelta rapida per PrintControl, scegliere Aggiungi e quindi scegliere Nuovo elemento.

  6. Nella finestra di dialogo Aggiungi nuovo elemento scegliere il modello Controllo utente Silverlight.

  7. Nella casella di testo Nome immettere Fattura e quindi scegliere il pulsante OK.

  8. Nella barra dei menu scegliere Visualizza, Casella degli strumenti.

  9. Nella finestra Casella degli strumenti espandere il nodo Controlli comuni di Silverlight, scegliere il controllo DataGrid e aggiungerlo all'area di progettazione.

  10. Nell'editor di codice sostituire il codice XAML esistente con il codice seguente:

    <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" Margin="-1,0,1,0">
    
                    <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><TextBlock TextWrapping="Wrap" Text="Invoice Date:" FontWeight="Bold" VerticalAlignment="Top"
    
                           Grid.Column="1" HorizontalAlignment="Left" Margin="0,0,5,0"/>
    
                    <TextBlock x:Name="InvoiceDate" TextWrapping="Wrap" Text="{Binding Screen.InvoiceDate}" Grid.Column="2" HorizontalAlignment="Left" VerticalAlignment="Top" />
               <TextBlock TextWrapping="Wrap"
    
                    Text="Invoice For:" FontWeight="Bold" Grid.Row="1" VerticalAlignment="Top" HorizontalAlignment="Left" 
    
                    Grid.Column="1" Margin="0,0,5,0"/>
    
                    <TextBlock TextWrapping="Wrap"
    
                    Text="{Binding Screen.Customers.SelectedItem.Name}" Grid.Row="1" Grid.Column="2" 
    
                           HorizontalAlignment="Left" VerticalAlignment="Top"/>
    
    
    
    
                    <Rectangle Grid.Column="2" Fill="#FF010108" Height="8" Stroke="Black" VerticalAlignment="Bottom" Grid.Row="3"/>
    
                    <TextBlock TextWrapping="Wrap"
    
                    Text="Total:" FontWeight="Bold" Grid.Row="4" VerticalAlignment="Top" Grid.Column="1"
    
                     TextAlignment="Right" Margin="0,0,4,0"/>
    
                    <TextBlock Grid.Column="2" Height="16" Grid.Row="4" TextWrapping="Wrap"
    
                Text="{Binding Screen.Customers.SelectedItem.OrderTotal, StringFormat=C}"
    
                           VerticalAlignment="Top" Margin="4,0,0,0"/>     
                </Grid>
            </Border>
        </StackPanel>
    </UserControl>
    

    Questo codice XAML definisce il layout del controllo. Nella sezione <sdk:DataGrid.Columns> vengono specificati i contenuti che verranno visualizzati in ogni colonna di DataGrid (in questo caso, i campi OrderItem e OrderAmount dell'entità Customers).

  11. In Esplora soluzioni espandere il nodo Invoice.xaml, aprire il menu di scelta rapida di Invoice.xaml.vb o Invoice.xaml.cs, quindi scegliere Apri.

  12. In Editor del codice sostituire il codice esistente con il codice seguente:

    Imports System.Windows.Printing
    
    Partial Public Class Invoice
        Inherits UserControl
        Private WithEvents pd As PrintDocument
        Public Sub New()
            InitializeComponent()
            pd = New PrintDocument
            Dim InvoiceDate As String
             InvoiceDate = 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();
    string InvoiceDate = null;
                InvoiceDate = 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;
    }
    }
    
  13. Nella barra dei menu scegliere Compila, Compila soluzione.

Usare il controllo utente

Infine, aggiungere il controllo utente alla schermata LightSwitch e testarlo.

Per aggiungere il controllo utente

  1. In Esplora soluzioni aprire il menu di scelta rapida per la schermata CustomersListDetail.lsml, quindi scegliere Apri.

  2. In Progettazione schermata scegliere il nodo Layout righe | Dettagli cliente.

  3. Sulla barra degli strumenti scegliere il pulsante Aggiungi elemento di layout, quindi scegliere Controllo personalizzato.

  4. Nella finestra di dialogo Aggiungi controllo personalizzato scegliere il pulsante Aggiungi riferimento.

  5. Nella finestra di dialogo Gestione riferimenti espandere il nodo Soluzione, selezionare la casella di controllo PrintControl e quindi scegliere il pulsante OK.

  6. Nella finestra di dialogo Aggiungi controllo personalizzato espandere i nodi PrintControl, scegliere il controllo Fattura e quindi scegliere il pulsante OK.

  7. Nell'editor della schermata scegliere il nodo Controllo personalizzato | Contenuto schermata e trascinarlo in modo che venga visualizzato sotto il nodo Griglia di dati | Ordini.

  8. Nella finestra Proprietà impostare il valore della proprietà Nome su Fattura.

  9. Nel gruppo Ridimensionamento scegliere i pulsanti di opzione Adatta per Allineamento orizzontale e Allineamento verticale.

  10. Nella barra dei menu scegliere Debug, Avvia debug per eseguire l'applicazione.

  11. Nell'applicazione in esecuzione scegliere il pulsante Stampa.

    Quando la finestra di dialogo Stampa viene visualizzata, è possibile scegliere una stampante.

Vedere anche

Altre risorse

Generazione di rapporti e stampa in LightSwitch