Создание и печать отчетов на стороне клиента в Silverlight - PullRequest
1 голос
/ 09 декабря 2011

Я работал над проектом, который должен создать простой отчет, содержащий заголовок, таблицу с простой группировкой и нижний колонтитул. этот отчет требует функции печати и может содержать более одной страницы. Мне было очень трудно создать этот отчет с использованием DataGrid, поскольку я не могу сгенерировать и распечатать более одной страницы PrintDocument. До сих пор я пытался использовать iframe (используя HTMLPlaceHolder от Telerik) с html-отчетом, который я генерирую с использованием кода silverlight, но функция печати javascript печатает всю страницу silverlight. У меня есть Telerik, и я использую его для предварительных отчетов, но я не хочу использовать отчет Telerik для этого конкретного отчета, так как отчет генерируется на сервере (я вообще не хочу передавать какое-либо значение на сервер для этого отчета ).

Можно ли создать такой отчет на стороне клиента с помощью функции печати. ​​

Я открыт для всех предложений, пока это не слишком дорого (до 100 долларов)

Дайте мне знать, если вам нужно больше деталей.

1 Ответ

1 голос
/ 09 декабря 2011

Возможно, вы захотите использовать класс PrintDocument в Silverlight. Использование как ..

в XAML файле создать список как

<ScrollViewer Height="300" VerticalScrollBarVisibility="Auto">
        <ItemsControl x:Name="printSurface">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal"
                Height="25">
                        <TextBlock Width="100"
                 Text="{Binding Name}" />
                        <TextBlock Width="75"
                 Text="{Binding Genre.Name}" />
                        <TextBlock Width="50"
                 Text="{Binding Price, StringFormat=c}" />
                    </StackPanel>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </ScrollViewer>

и код выглядит как

   void printButton_Click(object sender, RoutedEventArgs e)
    {
          PrintDocument doc = new PrintDocument();
          doc.PrintPage += new EventHandler<PrintPageEventArgs>(doc_PrintPage);
          doc.Print("Page title");
     }

     void doc_PrintPage(object sender, PrintPageEventArgs e)
      {
       // Stretch to the size of the printed page
       printSurface.Width = e.PrintableArea.Width;
       printSurface.Height = e.PrintableArea.Height;

       // Assign the XAML element to be printed
       e.PageVisual = printSurface;

       // Specify whether to call again for another page
       e.HasMorePages = false;
    }
...