| 

.NET C# Java Javascript Exception

1
Hallo an alle!

Ich habe eine WPF Anwendung zur Arbeitszeiterfassung geschrieben. Jetzt sollen natürlich auch diese Zeiten ausgedruckt werden können. Dabei bin ich auf ein Problem gestoßen. Wenn ich keine Spaltenbreiten definiere, dann sehe ich zwar alle 11 Spalten, aber diese sind nur ca. 2cm breit. Gebe ich aber jetzt die Spaltenbreiten vor, dann sehe ich nur die ersten 4 Spalten und den Rest nicht. Was mache ich da falsch?

Hier ist meine Methode:

private FlowDocument GenDoc() {
FlowDocument flowDoc = new FlowDocument();
//flowDoc.IsColumnWidthFlexible = true;

Table table1 = new Table();
flowDoc.Blocks.Add(table1);
table1.CellSpacing = 10;
table1.Background = Brushes.White;
for(int i = 0; i < 11; i++) {
TableColumn col = new TableColumn();
if(i < 3)
col.Width = new GridLength(100);
else
col.Width = new GridLength(50);
table1.Columns.Add(col);
}
table1.RowGroups.Add(new TableRowGroup());
table1.RowGroups[0].Rows.Add(new TableRow());
TableRow currentRow = table1.RowGroups[0].Rows[0];
currentRow.Background = Brushes.Silver;
currentRow.FontSize = 12;
currentRow.FontWeight = System.Windows.FontWeights.Bold;
foreach(GridViewColumn item in lvDataGrid.Columns) {
string strTmp = ((GridViewColumnHeader)item.Header).Content.ToString();
TableCell cell = new TableCell(new Paragraph(new Run(strTmp)));
currentRow.Cells.Add(cell);
}

foreach(clsLvItemHelper item in myAZCollection) {
currentRow = new TableRow();
currentRow.Cells.Add(new TableCell(new Paragraph(new Run(item.Lastname))));
currentRow.Cells.Add(new TableCell(new Paragraph(new Run(item.Firstname))));
currentRow.Cells.Add(new TableCell(new Paragraph(new Run(item.Day))));
currentRow.Cells.Add(new TableCell(new Paragraph(new Run(item.Begin))));
currentRow.Cells.Add(new TableCell(new Paragraph(new Run(item.End))));
currentRow.Cells.Add(new TableCell(new Paragraph(new Run(item.AZ))));
currentRow.Cells.Add(new TableCell(new Paragraph(new Run(item.GAP))));
currentRow.Cells.Add(new TableCell(new Paragraph(new Run(item.BeginCorr))));
currentRow.Cells.Add(new TableCell(new Paragraph(new Run(item.EndCorr))));
currentRow.Cells.Add(new TableCell(new Paragraph(new Run(item.AZCorr))));
currentRow.Cells.Add(new TableCell(new Paragraph(new Run(item.GAPCorr))));
table1.RowGroups[0].Rows.Add(currentRow);
}

return flowDoc;
}
19.02.2015
tschroeer 35 1 4
das erste was mir dazu einfällt ist, dass nicht mehr alle Spalten auf eine Seite passen.
luedi 20.02.2015
Der druckt nur auf der linken Hälfte, die rechte Hälfte ist komplett leer.

Ich habe jetzt mal vor Spaß auf Landscape geschaltet. Da passiert genau das gleiche. Der druckt nur 5 von 11 Spalten
tschroeer 20.02.2015
1 Antwort
0
Problem gelöst:

Ich mußte im FlowDocument eine kleine Ergänzung machen:

FlowDocument flowDoc = new FlowDocument();
flowDoc.IsColumnWidthFlexible = true;
flowDoc.ColumnGap = 0;
flowDoc.ColumnWidth = 0;
flowDoc.PageHeight = Double.NaN;
flowDoc.PageWidth = Double.NaN;
flowDoc.PagePadding = new Thickness(10);


und natärlich beim eigendlichen Drucken noch die Papiergröße einstellen:

private void btnPrint_Click(object sender, RoutedEventArgs e) {
FlowDocument myDoc;

PrintDialog printDialog = new PrintDialog();
if(printDialog.ShowDialog() == true) {
if(chkAllEmployees.IsChecked == true) {
myDoc = GenDocAll();
printDialog.PrintTicket.PageOrientation = System.Printing.PageOrientation.Landscape;
myDoc.PageHeight = printDialog.PrintableAreaHeight;
myDoc.PageWidth = printDialog.PrintableAreaWidth;
printDialog.PrintDocument((myDoc as IDocumentPaginatorSource).DocumentPaginator, "Arbeitszeiten aller Mitarbeiter");
}
else {
myDoc = GenDocOne();
printDialog.PrintTicket.PageOrientation = System.Printing.PageOrientation.Portrait;
myDoc.PageHeight = printDialog.PrintableAreaHeight;
myDoc.PageWidth = printDialog.PrintableAreaWidth;
printDialog.PrintDocument((myDoc as IDocumentPaginatorSource).DocumentPaginator, "Arbeitszeiten des ausgewählten Mitarbeiters");
}
}
}
20.02.2015
tschroeer 35 1 4

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH