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(35, 35, 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(null, this.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
Th69: 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(50, 50), printGrid.DesiredSize)); dialog.PrintVisual(printGrid, "A WPF printing"); |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!