3

Telerikアプリケーションでレポートを生成していMVCます。レポートは、Report Viewer. コントローラーからパラメーターを正しく渡していると思いますが、レポートがレンダリングされているときに、レポート コード ビハインドでパラメーター値を取得する方法または場所がわかりません。User Functionを使用して渡されたパラメーターの値に応じて、画像ボックスに動的にデータを入力したい

レポートを開くコントローラー コードを次に示します。バイヤー変数をハードコーディングすると、正しい画像がピクチャボックスに表示されます。

 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 

レポートがレンダリングされる前に、渡されたパラメーターをキャプチャして評価できるようにする必要がありますが、その方法がわかりません。何か案は?

4

1 に答える 1

3

Fianlly はこれを理解しました。コントローラーのコードは問題ありません (パラメーターは、私の例のようにハードコーディングするのではなく、動的に決定する必要があります)。

レポートにはパラメータが必要です。この場合は「Buyer」という名前です。

Telerik レポートの picturebox.value は、画像の URL を返すユーザー関数になります。関数を呼び出すと、レポート パラメータが次のように渡されます。

=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: ドライブにロードされた場合、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");
    }
}

} 
于 2013-11-09T21:00:40.767 に答える