如何根据传入的参数动态设置Telerik Report Picture框

时间:2013-11-07 23:09:37

标签: telerik-reporting

我正在Telerik申请中生成MVC报告。该报告将直接呈现为pdf格式,而不是使用Report Viewer。我想我正在从控制器正确传递参数但我无法弄清楚在呈现报表时如何或在何处获取报表代码中的参数值。我想使用User Function根据传入参数的值动态填充图片框。

这是我打开报告的Controller代码。如果我对买方变量进行硬编码,我会在图片框中显示正确的图像:

 public ActionResult PrintPoReport()
    {
        byte[] contents;
        Telerik.Reporting.Processing.RenderingResult result;

        using (var reportDocument = new LogisticsReports.Report1())
        {
            var buyerID = "999999";  //hard code buyerId for testing
            var irs = new InstanceReportSource();
            irs.ReportDocument = reportDocument;

            irs.Parameters.Add(new Parameter("Buyer", "buyerID")); // parameter to determine which jpg will populate picture box. **Never gets to Report1** 
            Telerik.Reporting.Processing.ReportProcessor rp = new Telerik.Reporting.Processing.ReportProcessor();
            result = rp.RenderReport("PDF", irs, null);
            contents = result.DocumentBytes;
        }

        return File(contents, "application/pdf", "P0 #" + id + ".pdf");
    }

报告的背后代码:

public partial class Report1 : Telerik.Reporting.Report
{
    public Report1()
    {

        InitializeComponent();

        var buyer = "999999"; //hard coded for testing...this works!
        //Need to capture the passed in parameter here
        if (buyer == "111111"){

            this.pictureBox1.Value = "http://www.arctecalaska.com/images/signatures/111111.bmp";
        }
        if (buyer == "999999")
        {

            this.pictureBox1.Value = "http://www.arctecalaska.com/images/signatures/Ike.jpg";
        }


     }
   }
}

问题是我从Controller发送的买方参数实际上从未实际进入报告。在调试期间,一旦代码命中行,报告InitializeComponent()就会运行:

var reportDocument = new LogisticsReports.Report1 

我需要能够在报告呈现之前捕获并评估传入的参数,但我不知道如何做到这一点。任何想法?

1 个答案:

答案 0 :(得分:3)

Fianlly想出这个。控制器代码很好(除了必须动态确定参数而不是像我的例子那样硬编码)。

报告需要有一个参数,在这种情况下,它名为“买方”

Telerik报告上的picturebox.value将是一个用户函数,它将返回图片的URL。调用该函数会将hte report参数传递给它,如下所示:

=MyNameSpace.Report1.ResolveURL(Parameters.Buyer.Value)

用户功能将存在于报告的代码后面。这是我开始工作的一个例子:

  public partial class Report1 : Telerik.Reporting.Report
{
    public Report1()    {

             InitializeComponent();
     }

    public static string ResolveUrl(string paramValue)
    {

        string imagePath = "";

        if (paramValue == "111111")
        {
            imagePath = "http://www.arctecalaska.com/images/signatures/111111.jpg";

        }
            if (paramValue == "999999")

                    {
            imagePath = "http://www.arctecalaska.com/images/signatures/999999.jpg";

        }

        return (imagePath);
      }
   }
}

如果图像来自URL以外的某个位置(如文件系统),则必须更改用户功能的输出类型并更改代码。例如,如果图像加载在C:Drive上,您可以将th3e函数更改为如下所示:

public class Report1 : Telerik.Reporting.Report
{
 public Report1()    {

         InitializeComponent();
 }
public static System.Drawing.Image ResolveUrl(string paramValue)
{
   if(paramValue=="111111")
    {
        return System.Drawing.Image.FromFile("C:\\111111.jpg");
    }
     else
    {
         return System.Drawing.Image.FromFile("C:\\888888.jpg");
    }
}

}