Code Behind - Loading, Passing Params

2 posts, 0 answers
  1. Kenneth
    Kenneth avatar
    5 posts
    Member since:
    Feb 2016

    Posted 25 Oct 2018 Link to this post

    I've looked through other posts, and I think I'm doing this correctly...but I must be missing something. I have a report that I created within VS2015 using 2018 R2. I don't want to show the report in a viewer. When I click a button, I have it rendering straight to a PDF. I only want the report to show info for the record I'm on in the application, so I created a parameter. When I pass the parameter, it doesn't use what I'm passing. Maybe I'm not understanding parameters. I want the report to pull info using the following SQL: select id, employee_id, employ_badge from employee where id = @id. (this is an example of what I want). I've included the code below. What am I missing? Am I loading the report wrong? Have I misunderstood parameters? Also, how do I set the datasource in the code behind? I've looked at the example that attached with a similar post and it looks like what I have.

    protected void btnPrint_Click(object sender, EventArgs e)
    {
    Telerik.Reporting.Processing.ReportProcessor reportProcessor =
    new Telerik.Reporting.Processing.ReportProcessor();
    // set any deviceInfo settings if necessary
    System.Collections.Hashtable deviceInfo = new System.Collections.Hashtable();
    Telerik.Reporting.TypeReportSource typeReportSource = new Telerik.Reporting.TypeReportSource();
    // reportName is the Assembly Qualified Name of the report
    typeReportSource.TypeName = typeof(Report1).AssemblyQualifiedName;
    int RowID = Convert.ToInt32(ViewState["FORMROWID"]);
    typeReportSource.Parameters.Add(new Telerik.Reporting.Parameter("id", RowID));

    Telerik.Reporting.Processing.RenderingResult result = reportProcessor.RenderReport("PDF", typeReportSource, deviceInfo);
    string fileName = result.DocumentName + "." + result.Extension;
    string path = System.IO.Path.GetTempPath();
    string filePath = System.IO.Path.Combine(path, fileName);
    using (System.IO.FileStream fs = new System.IO.FileStream(filePath, System.IO.FileMode.Create))
    {
    fs.Write(result.DocumentBytes, 0, result.DocumentBytes.Length);
    }
    WebClient User = new WebClient();
    Byte[] FileBuffer = User.DownloadData(filePath);
    if (FileBuffer != null)
    {
    Response.ContentType = "application/pdf";
    Response.AddHeader("content-length", FileBuffer.Length.ToString());
    Response.BinaryWrite(FileBuffer);
    }
    }

  2. Todor
    Admin
    Todor avatar
    227 posts

    Posted 30 Oct 2018 Link to this post

    Hi Kenneth,

    I suspect that the SqlDataSource parameter (@id) is not linked to the corresponding Report Parameter (id). We strongly recommend to do this in the report definition - check the attached screenshot for clearance. You may go through Using Parameters with the SqlDataSource component help article for more details and examples.

    We do *not* recommend to set the DataSource of a Report or data item in the code behind, as this is part of the report definition. We provide other tools for dynamically modifying the layout/data source properties of a report - for example with Bindings. The SqlDataSource connection string and query can also be modified run time based on report parameters - check Change Connection String dynamically through a report parameter KB article.
    If setting DataSource through code is necessary, you should instantiate/deserialize the report, change/set the data source and wrap the modified report in an InstanceReportSource to pass it to the report processor.

    Regards,
    Todor
    Progress Telerik
    Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Feedback Portal and vote to affect the priority of the items
Back to Top