Многостраничная печать сетки данных C# WPF: указанный элемент уже является логическим дочерним элементом другого элементC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Многостраничная печать сетки данных C# WPF: указанный элемент уже является логическим дочерним элементом другого элемент

Сообщение Anonymous »

Эта ошибка встречается много раз, но ни один из них не смог решить мою проблему. У меня есть сетка данных, содержащая более одной страницы, которую я хочу объединить в один фиксированный документ, а не печатать каждую страницу отдельно. Мой код взят из опубликованных источников, но я продолжаю получать эту ошибку, несмотря на попытку удалить uiElement из существующего родителя.
Сетка, которую я печатаю, содержит не только сетку данных (которая объединяется так, что в таблице появляются только выбранные строки). соответствующую страницу), но также верхние и нижние колонтитулы, содержащие поля со списком, текстовые поля или текстовые блоки, большинство из которых свернуты, а некоторые активированы (например, текстовое поле с номером страницы) для печати.
Мой код (после вызова PrintDialog):

Код: Выделить всё

//Create FixedDocument
FixedDocument document = new FixedDocument();
document.DocumentPaginator.PageSize = new Size(printDlg.PrintableAreaWidth, printDlg.PrintableAreaHeight);

//Add pages
ObservableCollection pages = new ObservableCollection();
for (pageNumber = 1; pageNumber = actualRowCount && totalsLine))
{
Grid thisGrid = new Grid();
thisGrid = grdPastTransactions;
UIElement uiElement = thisGrid;
var parent = VisualTreeHelper.GetParent(thisGrid) as Grid;
if (parent != null)
{
parent.Children.Remove(uiElement);
}
pages[pageNumber - 1].Width = document.DocumentPaginator.PageSize.Width;
pages[pageNumber - 1].Height = document.DocumentPaginator.PageSize.Height;
pages[pageNumber - 1].Children.Add(thisGrid);

//Add page to document
PageContent page1Content = new PageContent();
((IAddChild)page1Content).AddChild(pages[pageNumber - 1]);
document.Pages.Add(page1Content);
}
pageRowCount += pageNumber == 1 ? Math.Min(actualRowCount, firstPageLines) : 28;
}
//Print document
PrintMethods.PrintHelper.PrintNoPreview(printDlg, document);
и

Код: Выделить всё

public static void PrintNoPreview(PrintDialog printDialog, FixedDocument fixedDoc)
{
try
{
printDialog.PrintDocument(fixedDoc.DocumentPaginator, "PMM Report");
}
catch (System.Runtime.CompilerServices.RuntimeWrappedException)
{
MessageBox.Show("You are trying to over-write an existing PDF document of the same name which is open." +
"\n\nPlease close the old document and try again, or save the new document with a new name.", "Save to PDF failed", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
Я пытался добавить на страницу только саму сетку данных без каких-либо других элементов, но получил тот же результат. Я также пытался удалить сетку (grdPastTransactions) из поля зрения с помощью grdPastTransactions.Visibility=Visibility.Collapsed перед созданием фиксированного документа, но это также не работает.
Почему я не могу добавлять страницы в Фиксированный документ без генерации этой ошибки? Нужно ли мне создавать совершенно новую сетку (со всеми новыми элементами) для печати?

Подробнее здесь: https://stackoverflow.com/questions/786 ... -the-logic
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»