2013-11-07 2 views
3

Я создаю отчет Telerik в приложении MVC. Отчет предоставляется прямо в формате pdf, не используя Report Viewer. Я думаю, что я правильно передаю параметр с контроллера, но не могу понять, как и где получить значение параметров в коде отчета, когда отчет отображается. Я хочу динамически заполнять окно изображения в зависимости от значения переданного параметра с помощью User Function.Как динамически установить Telerik Report Picture box на основе переданного параметра

Вот мой код контроллера, который открывает отчет. Если я жесткий код переменной покупатель я получаю правильное изображение для отображения в PictureBox:

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"; 
     } 


    } 
    } 
} 

Проблема в том, что параметр покупатель я посылаю от Контроллер никогда не делает это в отчете. Во время отладки InitializeComponent отчета() работает, как только код попадет в строку:

var reportDocument = new LogisticsReports.Report1 

Мне нужно, чтобы иметь возможность фиксировать и оценивать переданный в параметре, прежде чем делает доклад, но я не вижу, как это сделать что. Есть идеи?

ответ

3

Fianlly вычислил этот один из. Код контроллера хорош (за исключением того, что параметр должен определяться динамически, а не жестко запрограммирован как мой пример).

В докладе необходимо будет иметь параметр, в этом случае он называется «Покупатель»

picturebox.value по докладу Telerik будет функция пользователя, которая возвращает URL изображения. Вызов функции будет передать параметр отчета Hte к нему следующим образом:

=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"); 
    } 
} 

}