This is a simple example to print UI Element in Silverlight.Main idea in this approach is to pass the existing gridview itemsSource to another grid which is created at run time.Below is the Code where I have called my Utiltiy Class containing the methods to print .In my case I have used RadGridView
private void btnPrint_Click(object sender, RoutedEventArgs e)
{
var uf = new Utilities.Print.PrintCustomGrid();
var grid = uf.CreateGridToPrint(RadGridViewBankBranch);
if (grid.ItemsSource != null)
uf.PrintAuditGrid(grid);
else
{
MessageBox.Show("Empty Grid Cannot be Printed");
}
}
public RadGridView CreateGridToPrint(RadGridView uiGrid)
{
var gridToPrint = new RadGridView();
gridToPrint.DataContext = uiGrid.DataContext;
gridToPrint.ItemsSource = uiGrid.ItemsSource;
gridToPrint.RowIndicatorVisibility = Visibility.Collapsed;
gridToPrint.ShowGroupPanel = false;
gridToPrint.IsFilteringAllowed = false;
gridToPrint.AutoGenerateColumns = false;
foreach (GridViewColumn column in uiGrid.Columns.OfType<GridViewColumn>())
{
GridViewColumn newColumn = (GridViewColumn)Activator.CreateInstance(column.GetType());
//gridToPrint.RowLoaded += GridViewReport_RowLoaded;
newColumn.CopyPropertiesFrom(column);
gridToPrint.Columns.Add(newColumn);
}
StyleManager.SetTheme(gridToPrint, StyleManager.GetTheme(uiGrid));
gridToPrint.SortDescriptors.AddRange(uiGrid.SortDescriptors);
gridToPrint.GroupDescriptors.AddRange(uiGrid.GroupDescriptors);
gridToPrint.FilterDescriptors.AddRange(uiGrid.FilterDescriptors);
return gridToPrint;
}
public void PrintAuditGrid(UIElement source)
{
var doc = new PrintDocument();
//doc.DocumentName = documentName;
var offsetY = 0d;
var totalHeight = 0d;
var canvas = new Canvas();
canvas.Children.Add(source);
doc.PrintPage += (s, e) =>
{
e.PageVisual = canvas;
if (totalHeight == 0)
{
totalHeight = source.DesiredSize.Height;
}
Canvas.SetTop(source, -offsetY);
offsetY += e.PrintableArea.Height;
e.HasMorePages = offsetY <= totalHeight;
};
doc.Print("Paywings" + Guid.NewGuid().ToString().Substring(1, 5));
}
853493f5-1f25-4f5d-a982-31626f479740|1|5.0
Categories:
C#, Silverlight, Telerik
27. August 2012
Tags:
Printing Silverlight, RadControls Print