528 lines
22 KiB
C#
528 lines
22 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data;
|
|
using System.Linq;
|
|
using System.Printing;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
using System.Windows.Controls.Primitives;
|
|
using System.Windows.Data;
|
|
using System.Windows.Documents;
|
|
using System.Windows.Markup;
|
|
using System.Windows.Media;
|
|
using System.Windows.Xps;
|
|
|
|
namespace PEP_Tool
|
|
{
|
|
class Print
|
|
{
|
|
public DataGrid CreatePrintGrid(DataTable List)
|
|
{
|
|
var aktuellesGrid = List;
|
|
DataGrid grid = new DataGrid();
|
|
|
|
|
|
DataGridTextColumn nameColumn = new DataGridTextColumn();
|
|
nameColumn.Header = "Name";
|
|
nameColumn.Binding = new Binding("Name");
|
|
nameColumn.Width = 180;
|
|
grid.Columns.Add(nameColumn);
|
|
|
|
DataGridTextColumn prenameColumn = new DataGridTextColumn();
|
|
prenameColumn.Header = "Vorname";
|
|
prenameColumn.Binding = new Binding("Vorname");
|
|
prenameColumn.Width = 180;
|
|
grid.Columns.Add(prenameColumn);
|
|
|
|
DataGridTextColumn dateColumn = new DataGridTextColumn();
|
|
dateColumn.Header = "Datum";
|
|
dateColumn.Binding = new Binding
|
|
{
|
|
Path = new PropertyPath("Datum"),
|
|
StringFormat = "dd.MM.yyyy"
|
|
};
|
|
dateColumn.Width = 100;
|
|
grid.Columns.Add(dateColumn);
|
|
|
|
DataGridTextColumn abtColumn = new DataGridTextColumn();
|
|
abtColumn.Header = "Abteilung";
|
|
abtColumn.Binding = new Binding
|
|
{
|
|
Path = new PropertyPath("Abteilung")
|
|
};
|
|
abtColumn.Width = 120;
|
|
grid.Columns.Add(abtColumn);
|
|
|
|
DataGridTextColumn zuweisungenColumn = new DataGridTextColumn();
|
|
zuweisungenColumn.Header = "Zuweisung";
|
|
zuweisungenColumn.Binding = new Binding("Zuweisung");
|
|
zuweisungenColumn.Width = 180;
|
|
grid.Columns.Add(zuweisungenColumn);
|
|
|
|
DataGridTextColumn bemerkungColumn = new DataGridTextColumn();
|
|
bemerkungColumn.Header = "Bemerkung";
|
|
bemerkungColumn.Binding = new Binding("Bemerkung");
|
|
bemerkungColumn.Width = 320;
|
|
grid.Columns.Add(bemerkungColumn);
|
|
|
|
grid.Width = nameColumn.Width.Value + prenameColumn.Width.Value + dateColumn.Width.Value + abtColumn.Width.Value + zuweisungenColumn.Width.Value + bemerkungColumn.Width.Value;
|
|
|
|
grid.AutoGenerateColumns = false;
|
|
grid.CanUserAddRows = false;
|
|
|
|
//grid.DataContext = aktuellesGrid;
|
|
|
|
return grid;
|
|
}
|
|
|
|
|
|
public void printDG(DataGrid dataGridParam, string title)
|
|
{
|
|
var dataGrid = dataGridParam;
|
|
|
|
PrintDialog printDialog = new PrintDialog();
|
|
if (printDialog.ShowDialog() == true)
|
|
{
|
|
FlowDocument fd = new FlowDocument();
|
|
|
|
Paragraph p = new Paragraph(new Run(title));
|
|
p.FontStyle = dataGrid.FontStyle;
|
|
p.FontFamily = dataGrid.FontFamily;
|
|
p.FontSize = 18;
|
|
fd.Blocks.Add(p);
|
|
|
|
Table table = new Table();
|
|
TableRowGroup tableRowGroup = new TableRowGroup();
|
|
TableRow r = new TableRow();
|
|
fd.PageWidth = printDialog.PrintableAreaWidth;
|
|
fd.PageHeight = printDialog.PrintableAreaHeight;
|
|
fd.BringIntoView();
|
|
fd.TextAlignment = TextAlignment.Center;
|
|
fd.ColumnWidth = 500;
|
|
|
|
table.CellSpacing = 0;
|
|
|
|
var headerList = dataGrid.Columns.Select(e => e.Header.ToString()).ToList();
|
|
List<dynamic> bindList = new List<dynamic>();
|
|
|
|
|
|
for (int j = 0; j < headerList.Count; j++)
|
|
{
|
|
int span = 0;
|
|
switch (j)
|
|
{
|
|
case 0:
|
|
span = 4;
|
|
break;
|
|
case 1:
|
|
span = 4;
|
|
break;
|
|
case 2:
|
|
span = 3;
|
|
break;
|
|
case 3:
|
|
span = 4;
|
|
break;
|
|
case 4:
|
|
span = 4;
|
|
break;
|
|
case 5:
|
|
span = 5;
|
|
break;
|
|
default:
|
|
span = 4;
|
|
break;
|
|
}
|
|
|
|
r.Cells.Add(new TableCell(new Paragraph(new Run(headerList[j]))));
|
|
r.Cells[j].ColumnSpan = span;//4;
|
|
r.Cells[j].Padding = new Thickness(4);
|
|
|
|
|
|
|
|
r.Cells[j].BorderBrush = Brushes.Black;
|
|
r.Cells[j].FontWeight = FontWeights.Bold;
|
|
r.Cells[j].Background = Brushes.DarkGray;
|
|
r.Cells[j].Foreground = Brushes.White;
|
|
r.Cells[j].BorderThickness = new Thickness(1, 1, 1, 1);
|
|
|
|
try
|
|
{
|
|
var binding = (dataGrid.Columns[j] as DataGridBoundColumn).Binding as Binding;
|
|
|
|
bindList.Add(binding.Path.Path);
|
|
}
|
|
catch (Exception)
|
|
{
|
|
}
|
|
|
|
}
|
|
tableRowGroup.Rows.Add(r);
|
|
table.RowGroups.Add(tableRowGroup);
|
|
for (int i = 0; i < dataGrid.Items.Count; i++)
|
|
{
|
|
//System.Diagnostics.Debug.WriteLine(dataGrid.ItemsSource.ToString().ToLower());
|
|
dynamic row;
|
|
if (dataGrid.ItemsSource.ToString().ToLower() == "system.data.linqdataview")
|
|
{ row = (DataRowView)dataGrid.Items.GetItemAt(i); }
|
|
else
|
|
{
|
|
row = dataGrid.Items.GetItemAt(i);
|
|
}
|
|
|
|
table.BorderBrush = Brushes.Gray;
|
|
table.BorderThickness = new Thickness(1, 1, 0, 0);
|
|
table.FontStyle = dataGrid.FontStyle;
|
|
table.FontFamily = dataGrid.FontFamily;
|
|
table.FontSize = 13;
|
|
tableRowGroup = new TableRowGroup();
|
|
r = new TableRow();
|
|
for (int j = 1; j <= 6; j++)
|
|
{
|
|
//if (row.GetType() == typeof(DataGridRow))
|
|
//{
|
|
//var x = row.GetPropertyValueForID(j, row) != null ? row.GetPropertyValueForID(j, row).ToString() : "";
|
|
//if (j == 3) x = x.ToString().Split(' ')[0];
|
|
var h = 0;
|
|
//r.Cells.Add(new TableCell(new Paragraph(new Run(x))));
|
|
switch(j)
|
|
{
|
|
case 1:
|
|
h = 1;
|
|
break;
|
|
case 2:
|
|
h = 2;
|
|
break;
|
|
case 3:
|
|
h = 4;
|
|
break;
|
|
case 4:
|
|
h = 3;
|
|
break;
|
|
case 5:
|
|
h = 9;
|
|
break;
|
|
case 6:
|
|
h = 10;
|
|
break;
|
|
}
|
|
|
|
if (dataGrid.ItemsSource.ToString().ToLower() == "system.data.linqdataview")
|
|
{
|
|
if (j == 3)
|
|
r.Cells.Add(new TableCell(new Paragraph(new Run(row.Row.ItemArray[h].ToString().Split(' ')[0]))));
|
|
else r.Cells.Add(new TableCell(new Paragraph(new Run(row.Row.ItemArray[h].ToString()))));
|
|
|
|
}
|
|
else
|
|
{
|
|
if (j == 3)
|
|
r.Cells.Add(new TableCell(new Paragraph(new Run(row.Row.ItemArray[h].ToString().Split(' ')[0]))));
|
|
else r.Cells.Add(new TableCell(new Paragraph(new Run(row.Row.ItemArray[h].ToString()))));
|
|
}
|
|
|
|
|
|
int span = 0;
|
|
switch (j - 1)
|
|
{
|
|
case 0:
|
|
span = 4;
|
|
break;
|
|
case 1:
|
|
span = 4;
|
|
break;
|
|
case 2:
|
|
span = 3;
|
|
break;
|
|
case 3:
|
|
span = 4;
|
|
break;
|
|
case 4:
|
|
span = 4;
|
|
break;
|
|
case 5:
|
|
span = 5;
|
|
break;
|
|
default:
|
|
span = 4;
|
|
break;
|
|
}
|
|
|
|
r.Cells[j - 1].ColumnSpan = span;// 4;
|
|
r.Cells[j - 1].Padding = new Thickness(4);
|
|
|
|
r.Cells[j - 1].BorderBrush = Brushes.DarkGray;
|
|
r.Cells[j - 1].BorderThickness = new Thickness(0, 0, 1, 1);
|
|
//}
|
|
}
|
|
|
|
tableRowGroup.Rows.Add(r);
|
|
table.RowGroups.Add(tableRowGroup);
|
|
|
|
}
|
|
fd.Blocks.Add(table);
|
|
|
|
|
|
printDialog.PrintDocument(((IDocumentPaginatorSource)fd).DocumentPaginator, "");
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//public const double cm = 37;
|
|
//public double Margin = 0.5 * cm;
|
|
//public double PageWidth = 21 * cm;
|
|
//public double PageHeight = 29 * cm;
|
|
//public double RowHeight = 0.7 * cm;
|
|
//public bool PageNumberVisibility = true;
|
|
//public bool DateVisibility = true;
|
|
//public double FontSize = 14;
|
|
//public double HeaderFontSize = 14;
|
|
//public bool IsBold = false;
|
|
//public void PrintDataGrid(FrameworkElement header, DataGrid grid, FrameworkElement footer, PrintDialog printDialog)
|
|
//{
|
|
// if (header == null) { header = new FrameworkElement(); header.Width = 1; header.Height = 1; }
|
|
// if (footer == null) { footer = new FrameworkElement(); footer.Width = 1; footer.Height = 1; }
|
|
// if (grid == null) return;
|
|
|
|
// Size pageSize = new Size(PageWidth, PageHeight);
|
|
|
|
// FixedDocument fixedDoc = new FixedDocument();
|
|
// fixedDoc.DocumentPaginator.PageSize = pageSize;
|
|
|
|
// double GridActualWidth = grid.ActualWidth == 0 ? grid.Width : grid.ActualWidth;
|
|
|
|
// double PageWidthWithMargin = pageSize.Width - Margin * 2;
|
|
// double PageHeightWithMargin = pageSize.Height - Margin * 2;
|
|
|
|
|
|
|
|
// // scale the header
|
|
// double headerScale = (header?.Width ?? 0) / PageWidthWithMargin;
|
|
// double headerWidth = PageWidthWithMargin;
|
|
// double headerHeight = (header?.Height ?? 0) * headerScale;
|
|
// header.Height = headerHeight;
|
|
// header.Width = headerWidth;
|
|
// // scale the footer
|
|
// double footerScale = (footer?.Width ?? 0) / PageWidthWithMargin;
|
|
// double footerWidth = PageWidthWithMargin;
|
|
// double footerHeight = (footer?.Height ?? 0) * footerScale;
|
|
// footer.Height = footerHeight;
|
|
// footer.Width = footerWidth;
|
|
|
|
// int pageNumber = 1;
|
|
// string Now = DateTime.Now.ToShortDateString();
|
|
|
|
// //add the header
|
|
// FixedPage fixedPage = new FixedPage();
|
|
// fixedPage.Background = Brushes.White;
|
|
// fixedPage.Width = pageSize.Width;
|
|
// fixedPage.Height = pageSize.Height;
|
|
|
|
// FixedPage.SetTop(header, Margin);
|
|
// FixedPage.SetLeft(header, Margin);
|
|
|
|
// fixedPage.Children.Add(header);
|
|
// // its like cursor for current page Height to start add grid rows
|
|
// double CurrentPageHeight = headerHeight + 1 * cm;
|
|
// int lastRowIndex = 0;
|
|
// bool IsFooterAdded = false;
|
|
|
|
// for (; ; )
|
|
// {
|
|
// int AvaliableRowNumber;
|
|
|
|
|
|
// var SpaceNeededForRestRows = (CurrentPageHeight + (grid.Items.Count - lastRowIndex) * RowHeight);
|
|
|
|
// //To avoid printing the footer in a separate page
|
|
// if (SpaceNeededForRestRows > (pageSize.Height - footerHeight - Margin) && (SpaceNeededForRestRows < (pageSize.Height - Margin)))
|
|
// AvaliableRowNumber = (int)((pageSize.Height - CurrentPageHeight - Margin - footerHeight) / RowHeight);
|
|
// // calc the Avaliable Row acording to CurrentPageHeight
|
|
// else AvaliableRowNumber = (int)((pageSize.Height - CurrentPageHeight - Margin) / RowHeight);
|
|
|
|
// // create new page except first page cause we created it prev
|
|
// if (pageNumber > 1)
|
|
// {
|
|
// fixedPage = new FixedPage();
|
|
// fixedPage.Background = Brushes.White;
|
|
// fixedPage.Width = pageSize.Width;
|
|
// fixedPage.Height = pageSize.Height;
|
|
// }
|
|
|
|
// // create new data grid with columns width and binding
|
|
// DataGrid gridToAdd;
|
|
// gridToAdd = GetDataGrid(grid, GridActualWidth, PageWidthWithMargin);
|
|
|
|
|
|
// FixedPage.SetTop(gridToAdd, CurrentPageHeight); // top margin
|
|
// FixedPage.SetLeft(gridToAdd, Margin); // left margin
|
|
|
|
// // add the avaliable rows to the cuurent grid
|
|
// for (int i = lastRowIndex; i < grid.Items.Count && i < AvaliableRowNumber + lastRowIndex; i++)
|
|
// {
|
|
// gridToAdd.Items.Add(grid.Items[i]);
|
|
// }
|
|
// lastRowIndex += gridToAdd.Items.Count + 1;
|
|
|
|
// // add date
|
|
// TextBlock dateText = new TextBlock();
|
|
// if (DateVisibility) dateText.Visibility = Visibility.Visible;
|
|
// else dateText.Visibility = Visibility.Hidden;
|
|
// dateText.Text = Now;
|
|
|
|
// // add page number
|
|
// TextBlock PageNumberText = new TextBlock();
|
|
// if (PageNumberVisibility) PageNumberText.Visibility = Visibility.Visible;
|
|
// else PageNumberText.Visibility = Visibility.Hidden;
|
|
// PageNumberText.Text = "Page : " + pageNumber;
|
|
|
|
// FixedPage.SetTop(dateText, PageHeightWithMargin);
|
|
// FixedPage.SetLeft(dateText, Margin);
|
|
|
|
// FixedPage.SetTop(PageNumberText, PageHeightWithMargin);
|
|
// FixedPage.SetLeft(PageNumberText, PageWidthWithMargin - PageNumberText.Text.Length * 10);
|
|
|
|
// fixedPage.Children.Add(gridToAdd);
|
|
// fixedPage.Children.Add(dateText);
|
|
// fixedPage.Children.Add(PageNumberText);
|
|
|
|
// // calc Current Page Height to know the rest Height of this page
|
|
// CurrentPageHeight += gridToAdd.Items.Count * RowHeight;
|
|
|
|
// // all grid rows added
|
|
// if (lastRowIndex >= grid.Items.Count)
|
|
// {
|
|
// // if footer have space it will be added to the same page
|
|
// if (footerHeight < (PageHeightWithMargin - CurrentPageHeight))
|
|
// {
|
|
// FixedPage.SetTop(footer, CurrentPageHeight + Margin);
|
|
// FixedPage.SetLeft(footer, Margin);
|
|
|
|
// fixedPage.Children.Add(footer);
|
|
// IsFooterAdded = true;
|
|
// }
|
|
// }
|
|
|
|
// fixedPage.Measure(pageSize);
|
|
// fixedPage.Arrange(new Rect(new Point(), pageSize));
|
|
// fixedPage.UpdateLayout();
|
|
|
|
// PageContent pageContent = new PageContent();
|
|
// ((IAddChild)pageContent).AddChild(fixedPage);
|
|
// fixedDoc.Pages.Add(pageContent);
|
|
|
|
// pageNumber++;
|
|
// // go to start position : New page Top
|
|
// CurrentPageHeight = Margin;
|
|
|
|
// // this mean that lastRowIndex >= grid.Items.Count and the footer dont have enough space
|
|
// if (lastRowIndex >= grid.Items.Count && !IsFooterAdded)
|
|
// {
|
|
// FixedPage ffixedPage = new FixedPage();
|
|
// ffixedPage.Background = Brushes.White;
|
|
// ffixedPage.Width = pageSize.Width;
|
|
// ffixedPage.Height = pageSize.Height;
|
|
|
|
// FixedPage.SetTop(footer, Margin);
|
|
// FixedPage.SetLeft(footer, Margin);
|
|
|
|
// TextBlock fdateText = new TextBlock();
|
|
// if (DateVisibility) fdateText.Visibility = Visibility.Visible;
|
|
// else fdateText.Visibility = Visibility.Hidden;
|
|
// dateText.Text = Now;
|
|
|
|
// TextBlock fPageNumberText = new TextBlock();
|
|
// if (PageNumberVisibility) fPageNumberText.Visibility = Visibility.Visible;
|
|
// else fPageNumberText.Visibility = Visibility.Hidden;
|
|
// fPageNumberText.Text = "Page : " + pageNumber;
|
|
|
|
// FixedPage.SetTop(fdateText, PageHeightWithMargin);
|
|
// FixedPage.SetLeft(fdateText, Margin);
|
|
|
|
// FixedPage.SetTop(fPageNumberText, PageHeightWithMargin);
|
|
// FixedPage.SetLeft(fPageNumberText, PageWidthWithMargin - PageNumberText.ActualWidth);
|
|
|
|
// ffixedPage.Children.Add(footer);
|
|
// ffixedPage.Children.Add(fdateText);
|
|
// ffixedPage.Children.Add(fPageNumberText);
|
|
|
|
// ffixedPage.Measure(pageSize);
|
|
// ffixedPage.Arrange(new Rect(new Point(), pageSize));
|
|
// ffixedPage.UpdateLayout();
|
|
|
|
// PageContent fpageContent = new PageContent();
|
|
// ((IAddChild)fpageContent).AddChild(ffixedPage);
|
|
// fixedDoc.Pages.Add(fpageContent);
|
|
// IsFooterAdded = true;
|
|
// }
|
|
|
|
// if (IsFooterAdded)
|
|
// {
|
|
// break;
|
|
// }
|
|
// }
|
|
|
|
// PrintFixedDocument(fixedDoc, printDialog);
|
|
//}
|
|
//private DataGrid GetDataGrid(DataGrid grid, double GridActualWidth, double PageWidthWithMargin)
|
|
//{
|
|
// DataGrid printed = new DataGrid();
|
|
|
|
|
|
// // styling the grid
|
|
// Style rowStyle = new Style(typeof(DataGridRow));
|
|
// rowStyle.Setters.Add(new Setter(Control.BackgroundProperty, Brushes.White));
|
|
// rowStyle.Setters.Add(new Setter(Control.FontSizeProperty, FontSize));
|
|
// if (IsBold) rowStyle.Setters.Add(new Setter(Control.FontWeightProperty, FontWeights.Bold));
|
|
// rowStyle.Setters.Add(new Setter(Control.HeightProperty, RowHeight));
|
|
|
|
|
|
// Style columnStyle = new Style(typeof(DataGridColumnHeader));
|
|
// columnStyle.Setters.Add(new Setter(Control.FontSizeProperty, HeaderFontSize));
|
|
// columnStyle.Setters.Add(new Setter(Control.HorizontalContentAlignmentProperty, HorizontalAlignment.Center));
|
|
// columnStyle.Setters.Add(new Setter(Control.BorderThicknessProperty, new Thickness(0, 0.5, 0, 1.5)));
|
|
// columnStyle.Setters.Add(new Setter(Control.BackgroundProperty, Brushes.White));
|
|
// columnStyle.Setters.Add(new Setter(Control.BorderBrushProperty, Brushes.Black));
|
|
// columnStyle.Setters.Add(new Setter(Control.FontWeightProperty, FontWeights.SemiBold));
|
|
|
|
|
|
// printed.RowStyle = rowStyle;
|
|
|
|
// printed.VerticalGridLinesBrush = Brushes.Black;
|
|
// printed.HorizontalGridLinesBrush = Brushes.Black;
|
|
// printed.FontFamily = new FontFamily("Arial");
|
|
|
|
// printed.RowBackground = Brushes.White;
|
|
// printed.Background = Brushes.White;
|
|
// printed.Foreground = Brushes.Black;
|
|
// // get the columns of grid
|
|
// foreach (var column in grid.Columns)
|
|
// {
|
|
// if (column.Visibility != Visibility.Visible) continue;
|
|
|
|
// DataGridTextColumn textColumn = new DataGridTextColumn();
|
|
// textColumn.HeaderStyle = columnStyle;
|
|
// textColumn.Header = column.Header;
|
|
// textColumn.Width = column.ActualWidth / GridActualWidth * PageWidthWithMargin;
|
|
// textColumn.Binding = ((DataGridTextColumn)column).Binding;
|
|
// printed.Columns.Add(textColumn);
|
|
// }
|
|
|
|
// printed.BorderBrush = Brushes.Black;
|
|
|
|
|
|
// return printed;
|
|
//}
|
|
|
|
//public void PrintFixedDocument(FixedDocument fixedDoc, PrintDialog printDialog)
|
|
//{
|
|
// XpsDocumentWriter writer = PrintQueue.CreateXpsDocumentWriter(printDialog.PrintQueue);
|
|
// writer.Write(fixedDoc, printDialog.PrintTicket);
|
|
//}
|
|
}
|
|
}
|