积极答复者
PagedCollectionView的MoveToNextPage怎么用?

问题
答案
-
终于把它搞出来了,贴出来与大家分享,办法较土,请楼上指正,见笑了:
public void _printDataGrid( ChildWindow form, DataGrid brow , int pagesizeMax )
{
System.Windows.Printing.PrintDocument docToPrint = new System.Windows.Printing.PrintDocument();
PagedCollectionView pcv = brow.ItemsSource as PagedCollectionView;
if (pcv == null)
{
MessageBox.Show("表格里无数据!");
return;
}// 保存原来状态
Thickness a0 = form.Margin;
double a1 = form.Height;
double a2 = form.Width;
Thickness c0 = brow.Margin;
double c1 = brow.Height;
double c2 = brow.Width;
int c3 = pcv.PageSize;int pagesize;
if (pagesizeMax <= 0)
pagesize = 37;// 每页行数最大值缺省37
else
pagesize = pagesizeMax;
int count = pcv.Count; // 总记录数
int pagen = 0; // 共几页(当==0时表示还未计算)
int pagen2 = 1;
docToPrint.PrintPage += (s, e) =>
{
form.Height = e.PrintableArea.Height * 2;form.Width = e.PrintableArea.Width;
brow.Margin = new Thickness(0, 0, 0, 0);if (pagen == 0)
{
while (pagesize > 0)
{
pcv.PageSize = pagesize;
pcv.MoveToFirstPage();
brow.UpdateLayout();if (brow.DesiredSize.Height < e.PrintableArea.Height)
{
pagen = (int)((count + pagesize - 1) / pagesize);
break;
}
pagesize--;
}
}if (pagen2 < pagen)
e.HasMorePages = true;
else
e.HasMorePages = false;
e.PageVisual = brow;pcv.MoveToPage(pagen2 - 1);
brow.UpdateLayout();
pagen2++;
};
docToPrint.EndPrint += (s, e) =>
{
pcv.PageSize = c3;
form.Margin = a0;
form.Height = a1;
form.Width = a2;
brow.Margin = c0;
brow.Height = c1;
brow.Width = c2;
brow.UpdateLayout();
};
docToPrint.Print("Sunpro Print");
}- 已标记为答案 Min-Hong Tang - MSFT 2010年5月20日 7:52
全部回复
-
终于把它搞出来了,贴出来与大家分享,办法较土,请楼上指正,见笑了:
public void _printDataGrid( ChildWindow form, DataGrid brow , int pagesizeMax )
{
System.Windows.Printing.PrintDocument docToPrint = new System.Windows.Printing.PrintDocument();
PagedCollectionView pcv = brow.ItemsSource as PagedCollectionView;
if (pcv == null)
{
MessageBox.Show("表格里无数据!");
return;
}// 保存原来状态
Thickness a0 = form.Margin;
double a1 = form.Height;
double a2 = form.Width;
Thickness c0 = brow.Margin;
double c1 = brow.Height;
double c2 = brow.Width;
int c3 = pcv.PageSize;int pagesize;
if (pagesizeMax <= 0)
pagesize = 37;// 每页行数最大值缺省37
else
pagesize = pagesizeMax;
int count = pcv.Count; // 总记录数
int pagen = 0; // 共几页(当==0时表示还未计算)
int pagen2 = 1;
docToPrint.PrintPage += (s, e) =>
{
form.Height = e.PrintableArea.Height * 2;form.Width = e.PrintableArea.Width;
brow.Margin = new Thickness(0, 0, 0, 0);if (pagen == 0)
{
while (pagesize > 0)
{
pcv.PageSize = pagesize;
pcv.MoveToFirstPage();
brow.UpdateLayout();if (brow.DesiredSize.Height < e.PrintableArea.Height)
{
pagen = (int)((count + pagesize - 1) / pagesize);
break;
}
pagesize--;
}
}if (pagen2 < pagen)
e.HasMorePages = true;
else
e.HasMorePages = false;
e.PageVisual = brow;pcv.MoveToPage(pagen2 - 1);
brow.UpdateLayout();
pagen2++;
};
docToPrint.EndPrint += (s, e) =>
{
pcv.PageSize = c3;
form.Margin = a0;
form.Height = a1;
form.Width = a2;
brow.Margin = c0;
brow.Height = c1;
brow.Width = c2;
brow.UpdateLayout();
};
docToPrint.Print("Sunpro Print");
}- 已标记为答案 Min-Hong Tang - MSFT 2010年5月20日 7:52