即使设置了参数,Winforms ReportViewer也会为参数传递null

时间:2013-10-02 19:51:25

标签: winforms reportviewer ssrs-2008-r2

即使我在代码中设置了参数,我也一直认为参数必须设置错误。我已运行探查器以查看传递给SSRS的内容,并且探查器指示参数= null。然而,所有这些都是在代码中设置的。有人有主意吗?代码如下:

string strReportPath;
      Microsoft.Reporting.WinForms.ReportParameter prmFranchiseOID;
      Microsoft.Reporting.WinForms.ReportParameter prmSchoolOID;
      Microsoft.Reporting.WinForms.ReportParameter prmRoomOID;
      Microsoft.Reporting.WinForms.ReportParameter prmOrderDate;
      Microsoft.Reporting.WinForms.ReportParameter prmLanguage;
      Microsoft.Reporting.WinForms.ReportParameter prmContrast;
      List<Microsoft.Reporting.WinForms.ReportParameter> prms = new List<ReportParameter>();
        byte[] pdf = null;

        try
        {
            prmFranchiseOID = new Microsoft.Reporting.WinForms.ReportParameter("FranchiseOID", "8D126AA2-2E5C-4B2B-8D19-167027F8C7D8");
            prmSchoolOID = new Microsoft.Reporting.WinForms.ReportParameter("SchoolOID", "96FEE335-0CB9-413A-9DDC-78F8C67770C4");
            prmRoomOID = new Microsoft.Reporting.WinForms.ReportParameter("RoomOID", "null");
            prmOrderDate = new Microsoft.Reporting.WinForms.ReportParameter("OrderDate", DateTime.Now.AddDays(1).Date.ToString());
            prmLanguage = new Microsoft.Reporting.WinForms.ReportParameter("Language", "en-CA");
            prmContrast = new Microsoft.Reporting.WinForms.ReportParameter("Contrast", "true");

            prms.Add(prmFranchiseOID);
            prms.Add(prmSchoolOID);
            prms.Add(prmRoomOID);
            prms.Add(prmOrderDate);
            prms.Add(prmLanguage);
            prms.Add(prmContrast);

            // Note: For Account Holder users, their specified report folder is "/LunchLady/User".
            strReportPath = "/LunchLady/Franchise/" + urlReportName;

            try
            {
                rvReport.ServerReport.ReportServerUrl = new System.Uri("https://testsql.thelunchlady.ca/ReportServer");
                rvReport.ServerReport.ReportPath = strReportPath;
                rvReport.ServerReport.SetParameters(prms);

                string ReportType = "PDF";

                pdf = rvReport.ServerReport.Render(ReportType);

由于

1 个答案:

答案 0 :(得分:0)

在ASP.NET中对SSRS控件进行了大量编程之后,我发现可能与WinForms相关或不相关的一件事是,每个SSRS参数本身实际上都是一个集合(由于参数能够多选)。

那么对我们有用的是集合(在你的情况下是prms)类型

List<IEnumerable<ReportViewer.ReportParameter>> prms

使用SetParameters函数添加参数时,我们一次添加一个参数:

for (int i = 0; i < prms.Count; i++)
{
    rvReport.ServerReport.SetParameters(prms[i]);
}

同样,这对我们在ASP.NET中有用,可能是你可以尝试的东西。