2011-01-31 3 views
1

Мне сложно получить дополнительный отчет, который будет отображаться в моем приложении, используя reportviewer. Он отлично работает при отладке локально. Но когда я загружаю его на сервер, суб-отчеты пустые.Отсутствует Subreports, когда RDLC перемещается на сервер

Я считаю, что событие SubreportProcessing не срабатывает, так как я не вижу, как хранимые процедуры запускаются из SQL Server Profiler. Вот мой код, который я использую.

private void RunReport(string strFormat, int PlanID) 
    { 
     const string reportrdlc = "Reports\\Report_All_Sections.rdlc"; 
     LocalReport report = new LocalReport {ReportPath = Server.MapPath(reportrdlc)}; 
     report.SetBasePermissionsForSandboxAppDomain(new PermissionSet(PermissionState.Unrestricted)); 
     report.DataSources.Clear(); 
     report.SubreportProcessing += SetSubDataSource; 

     report.DataSources.Add(new ReportDataSource("DataSet_usp_GetSD", _wpt.Get_SD(PlanID).Copy())); 

     report.Refresh(); 

     string mimeType; 
     string encoding; 
     string fileNameExtension; 
     string[] streams; 
     Warning[] warnings; 

     byte[] pdfContent = report.Render(strFormat, null, out mimeType, out encoding, 
        out fileNameExtension, out streams, out warnings); 

     System.IO.MemoryStream stream = new System.IO.MemoryStream(pdfContent); 
     Response.ContentType = strFormat == "EXCEL" ? "application/vnd.ms-excel" : "application/pdf"; 

     Response.BinaryWrite(stream.ToArray()); 
     Response.Flush(); 
     Response.Close(); 
     stream.Close(); 

    } 
    public void SetSubDataSource(object sender, SubreportProcessingEventArgs e) 
    { 
     int PlanID = 1; 
     if (Request.QueryString["PlanID"] != null) 
     { 
      try 
      { 
       PlanID = Convert.ToInt32(Request.QueryString["PlanID"]); 
      } 
      catch (Exception Ex) 
      { 
       PlanID = 1; 
      } 
     } 
     switch (e.ReportPath) 
     { 
      case "Report_All_Mentor": 
       e.DataSources.Add(new ReportDataSource("DataSet_usp_GetMC", _wpt.Get_MC(PlanID).Copy())); 
       break; 
      case "Report_All_Intern": 
       e.DataSources.Add(new ReportDataSource("DataSet_usp_GetEA", _wpt.Get_EA(PlanID).Copy())); 
       break; 
     } 


    } 
+0

Вы нашли решение для этого? – Cyberdrew

+0

Нет, мне пришлось вернуться к 2005 году в формате RDLC, чтобы исправить это. Если вы знаете о решении, дайте мне знать. – Jeff

ответ

1

У меня, похоже, такая же проблема. Я считаю, что проблема заключается в том, что при развертывании reportPath содержит полный путь для отчета, но когда вы отлаживаете локально, он передает только имя отчета.

Возможно ли, что ваше событие SubreportProcessing действительно срабатывает, но в вашем операторе switch, кроме случаев, соответствует полному пути, содержащемуся в параметре reportPath.

Я не знаю, как это разрешить, но я думаю, что это может быть основной причиной.

Смежные вопросы