Aus meiner letzten Inhouse Silverlight Schulung kam gerade eine Frage per Mail rein. Wie ging das doch grad mit Drucken noch mal? Drucken sollte ja in Zeiten von papierlosen Büro…
Also dann mal kurz zur Einleitung. Für mein Beispiel hole ich Daten aus einem Ria Service. Tabelle ist wie immer Customers aus der Northwind. Angezeigt wird in einem Datagrid. Normalerweise reichen drei Zeilen Code aus, um aus Silverlight mit RIA Services zu sprechen. Ich habe das Beispiel etwas umfangreicher gestaltet, um das Callback Event zu bekommen und auch die Möglichkeit zu haben LINQ Querys abzusenden. So kann man die Daten später auch filtern, sortieren oder pagen.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
Handles Button1.Click
Dim qry = From c In svc.GetCustomersQuery()
Select c
Dim lo As LoadOperation = svc.Load(qry)
AddHandler lo.Completed, AddressOf loadOp_Completed
End Sub
Private Sub loadOp_Completed(ByVal sender As Object, ByVal e As EventArgs)
Dim lo = CType(sender, LoadOperation(Of Customers))
Dim l As List(Of Customers)
l = lo.Entities.ToList()
DataGrid1.ItemsSource = l
End Sub
Das Drucken selbst ist sehr einfach. Der Benutzer kann auch direkt aus dem Browser, also ohne OOB, drucken.
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
Handles Button2.Click
Dim doc As PrintDocument = New PrintDocument()
AddHandler doc.PrintPage, AddressOf doc_PrintPage
doc.Print("KundenListe")
End Sub
Private Sub doc_PrintPage(ByVal sender As Object, ByVal e As PrintPageEventArgs)
e.PageVisual = DataGrid1
End Sub
Es kommt der übliche Druckerdialog des Betriebssystems und das Ergebnis ist ganz genau der gedruckte Dialog.
Im nächsten Blog Post werde ich das Beispiel auf mehrseitigen Druck ergänzen und das ganze etwas schöner formatieren.