I've got the following code in an implementation of IEmbeddedVisualPaginator:
public bool MoveToNextPage() { if (_reportSettings.PageRange.PageTo > 0 && _logicalPageNumber >= _reportSettings.PageRange.PageTo) return false;
IEnumerable<EmploymentSeriesError> myPageData = myDataSource.Skip((int)rowsPerPage * _logicalPageNumber).Take<EmploymentSeriesError>((int)rowsPerPage).ToList(); if (myPageData.Count() <= 0) return false;
_logicalPageNumber++; xamDataGrid.DataSource = null; xamDataGrid.DataSource = myPageData; xamDataGrid.BringDataItemIntoView(myPageData.ElementAt(0), false); this.Measure(printableSize); this.Arrange(new Rect(printableSize)); return true; }
public bool MoveToPosition(PagePosition pagePosition) { _logicalPageNumber = _reportSettings.PageRange.PageFrom; IEnumerable<EmploymentSeriesError> myPageData = myDataSource.Skip((int)rowsPerPage * (_logicalPageNumber - 1)).Take<EmploymentSeriesError>((int)rowsPerPage).ToList(); if (myPageData.Count() <= 0) return false;
xamDataGrid.DataSource = null; xamDataGrid.DataSource = myPageData; xamDataGrid.BringDataItemIntoView(myPageData.ElementAt(0), false); this.Measure(printableSize); this.Arrange(new Rect(printableSize)); return true; }
When I try to print a single page from the middle of the document, MoveToPosition is called first, as I would expect, followed by MoveToNextPage. However, the page that I set up for rendering in MoToPosition does not appear in the final print, which is to XPS. What am I missing? Printing the full document works fine.
One thing to keep in mind is that during a print operation everything needs to be done synchronously. Calling UpdateLayout() on the grid might be something to try.