2011-12-09 32 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; 
    }