Ever wanted to export a Telerik report from a Silverlight application?

This is easily accomplished by instantiating the ReportServiceClient class, which plays the role of proxy to the Telerik Report Service.

To specify that you want to render the report we use the RenderAsync method of the ReportServiceClient, which invokes the respective method on the server (remember that it serves as proxy) that would return the rendered report.

Since we’ve used an asynchronous method and we do not know when the render would finish, we need to handle the RenderCompleted event. In the RenderCompleted event we get the result from the rendering and decide what to do with it -  in this case write down the report.\

An interesting part to note here is that we invoke the ShowDialog method prior to having the rendered report, because the dialog box, can only be called from user-initiated code, such as a button Click event. If ShowDialog is called from code that is not user-initiated, a SecurityException is thrown. More info on SaveFileDialog is available in this MSDN article.

Here is the code we've used:

public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();
        }
  
        Stream file;
  
        private void Button_Click(object sender, RoutedEventArgs e)
        
            var fileDlg = new SaveFileDialog();
            fileDlg.Filter = "PDF files|*.pdf|All files|*.*";
              
            if (fileDlg.ShowDialog() == true)
            {
                this.file = fileDlg.OpenFile();
                var serviceClient = new ReportServiceClient(new Uri(App.Current.Host.Source, "../ReportService.svc"));
                serviceClient.RenderAsync("PDF"
                    "Telerik.Reporting.Examples.CSharp.Report1, CSharp.ReportLibrary, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
                    null
                    null);
                serviceClient.RenderCompleted += new EventHandler<RenderEventArgs>(serviceClient_RenderCompleted);
            }
        }
  
        void serviceClient_RenderCompleted(object sender, RenderEventArgs e)
        {
            var result = e.RenderingResult;
            if (this.file != null)
            {
                this.file.Write(result.DocumentBytes, 0, result.DocumentBytes.Length);
                this.file.Close();
                this.file.Dispose();
                this.file = null;
            }
        }    
    }

 

and you'll also find attached a demo application.

[SilverlightExport]

P.S. Information about programmatic export and save of Telerik reports for web and windows forms applications is available in our documentation and KB sections:

Check the demo & enjoy!


About the Author

Stefan Tsokev

Stefan’s main interests outside the .NET domain include rock music, playing the guitar and swimming.

Related Posts

Comments

Comments are disabled in preview mode.