2011-12-09 53 views
1

我一直在研究一個項目,該項目需要生成一個簡單報告,其中包含一個標題,一個簡單分組和一個頁腳的表格。此報告需要打印功能,並且可能不止一頁。 我發現使用DataGrid創建此報表確實很困難,因爲我無法生成並打印多個頁面PrintDocument。 到目前爲止,我嘗試使用iframe(使用Telerik的HTMLPlaceHolder)和html報告,後者使用silverlight代碼生成,但是javascript打印功能打印整個silverlight頁面。 我有telerik和我用它來提前報告,但我不想爲此特定報告使用telerik報告,因爲報告是在服務器上生成的(我不想將任何值返回給服務器報告)。在Silverlight中生成和打印客戶端報告

有什麼辦法可以在客戶端使用打印功能生成這樣的報告。

我向所有人開放的建議,只要它不是太昂貴(100 $)

讓我知道如果你需要更多的細節。

回答

1

您可能想在Silverlight中使用PrintDocument類。用法是一樣..

在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; 
    }