Entwickler-Ecke

WPF / Silverlight - wpf DataGrid drucken


funcry - Do 25.08.11 14:29
Titel: wpf DataGrid drucken
Derzeit suche ich nach einer simplen Möglichkeit ein WPF-Datagrid zu drucken.

Der aktuelle Ansatz mittels dem folgendem Quellcode ist leider nicht praktikabel, da bei längeren Inhalten das Ergebnis fehlerhaft ist (Zeilen wiederholen sich).


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
private void MenuItemPrint_Click(object sender, RoutedEventArgs e)
        {
            PrintDialog printDlg = new PrintDialog();
            if (printDlg.ShowDialog() == true)
            {
                Size pageSize = new Size(printDlg.PrintableAreaWidth - 35, printDlg.PrintableAreaHeight - 35);
                this.dataGridQueryResult.Measure(pageSize);
                this.dataGridQueryResult.Arrange(new Rect(3535, pageSize.Width - 35, pageSize.Height - 35));
                printDlg.PrintVisual(this.dataGridQueryResult, this._fileName + " " + DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToShortTimeString());
            }
        }


funcry - Do 25.08.11 18:12

Habs so gelöst....



C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
private void MenuItemPrint_Click(object sender, RoutedEventArgs e)
        {
            this.dataGridQueryResult.SelectAllCells();
            this.dataGridQueryResult.ClipboardCopyMode = DataGridClipboardCopyMode.IncludeHeader;
            ApplicationCommands.Copy.Execute(nullthis.dataGridQueryResult);
            this.dataGridQueryResult.UnselectAllCells();            
            String result = (string)Clipboard.GetData(DataFormats.Html);
            Clipboard.Clear();

            string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "context.html");
            File.WriteAllText(path, result);
            Process.Start(new ProcessStartInfo(path));
        }


UserNext - So 31.03.13 22:53

Kann jemand bestätigen ob das so richtig ist?
Da bekomme ich doch nur eine html seite angezeigt aber wie drucke ich sie?

Moderiert von user profile iconTh69: Unnötige Full-Quotes entfernt.


Th69 - Mo 01.04.13 10:39

Anscheinend dann von Hand im geöffneten Browser.
Man könnte aber auch dem Process Parameter mitgeben, z.B. "/p" oder "-print" o.ä. (leider unterstützen dies die gängigen Standard-Browser wie z.B. IE oder Firefox nicht - nur über spezielle Add-ons):

C#-Quelltext
1:
Process.Start(new ProcessStartInfo(path, "/p"));                    


Die bessere Alternative wäre m.E. also weiterhin der erste Weg über PrintVisual, nur daß man dann den beschriebenen Fehler bei mehrseitigem Druck noch beseitigen müßte.
Auf WPF Printing Overview [http://code.msdn.microsoft.com/windowsdesktop/WPF-Printing-Overview-f28c541a] wird folgendes vorgeschlagen:

C#-Quelltext
1:
2:
3:
4:
printGrid.Measure(new Size(dialog.PrintableAreaWidth, dialog.PrintableAreaHeight)); 
printGrid.Arrange(new Rect(new Point(5050), printGrid.DesiredSize)); 
 
dialog.PrintVisual(printGrid, "A WPF printing");