Member 13406906 Ответов: 1

Crystal report не отображает никаких данных, хотя набор данных был установлен с помощью метода push


Я новичок в crystal report. Я столкнулся с проблемой, что мой отчет не показывает никаких данных, хотя набор данных показал, что у него есть данные во время отладки. Я заметил, что все пошло не так после строки " m_rptViewReport.SetDataSource(ds);", она показывает "HasRecords = function evaluation disabled because a previous function evaluation timed out. Вы должны продолжить выполнение, чтобы повторно включить функцию оценки crystal reports" в основном, я пытаюсь экспортировать данные в файл xls с помощью метода push. Я использую VS2015, и моя версия сборки crystal report - 13.0.3500.0

Пожалуйста, взгляните на мой код
public bool ExportToFile(DataSet ds,string fileType)
    {
        try
        {
            object obj = null;
            char[] split ={ '.' };
            CrystalDecisions.CrystalReports.Engine.ReportDocument m_rptViewReport = null;


                if (File.Exists(Request.PhysicalApplicationPath + "\\" + this.ReportFile))
                {
                   try {
                    m_rptViewReport = new CrystalDecisions.CrystalReports.Engine.ReportDocument();
                    m_rptViewReport.Load(Request.PhysicalApplicationPath + "\\" + this.ReportFile);

                       ds.WriteXml("D:\\testfile.XML", XmlWriteMode.WriteSchema); //the output XML file does have data
                       m_rptViewReport.SetDataSource(ds);//something went wrong after this line
                   }
                   catch (Exception ex) //nothing happened here
                   {
                       throw ex;
                   }
                }
                else
                    this.SetTextTitle(Resources.GetLanguage("msgNoFile") + " " + this.ReportFile);

            if (m_rptViewReport.HasRecords){ //I added this line later and founded that the value is not TRUE
            if (m_rptViewReport != null)
            {
               SetReportParameterValue(m_rptViewReport);

                       Response.ContentType = "application/vnd.ms-excel";

                       try {
                           m_rptViewReport.ExportToHttpResponse(CrystalDecisions.Shared.ExportFormatType.Excel, Response, true, this.ReportCode);

                       }
                       catch (System.Threading.ThreadAbortException ex1)
                       {
                           //throw ex1;
                       }

            }
           }
           return true;
        }
        catch(Exception ex)
        {
           return false;
        }
    }

Спасибо

Что я уже пробовал:

- Я добавил useLegacyV2RuntimeActivationPolicy= "true" в app.config, а затем удалил его, но оба они не работали.
- Я также удалил весь CrystalReportViewer из своего пользовательского интерфейса.

Graeme_Grant

Установили ли вы точки останова, чтобы проверить, действительно ли данные передаются в CR?

1 Ответов

Рейтинг:
2

koklimabc

Лучший подход из моего опыта,

Создайте новую страницу aspx, измените все внутри Page_init () (потому что не работает другая стадия), убедитесь, что также поместите CrystalReportViewer на представления разметки.

protected void Page_Init(object sender, EventArgs e)
        {
            rptfile = new CrystalDecisions.CrystalReports.Engine.ReportDocument();
            rptfile.Load(Server.MapPath("~/Reports/Report.rpt"));
            rptfile.SetDatabaseLogon("sa", "123", @"192.168.102.1\Database", "Data");
            rptfile.Refresh();

            .....

            OleDbDataAdapter sql = new OleDbDataAdapter(query, Connection);
                //OleDbDataAdapter sql = new OleDbDataAdapter();
                //sql.SelectCommand = new OleDbCommand(query, Connection);
            DataSet ds = new DataSet();
            sql.Fill(ds);

            rptfile.SetDataSource(ds.Tables[0]);
            this.CrystalReportViewer1.ReportSource = rptfile;
            CrystalDecisions.Shared.ConnectionInfo connectinfo = new 
            CrystalDecisions.Shared.ConnectionInfo();
            connectinfo.ServerName = @"192.168.102.1/Database";
            connectinfo.UserID = "sa";
            connectinfo.Password = "123";
            connectinfo.DatabaseName = "Data";

            CrystalDecisions.Shared.TableLogOnInfos TableLoginInfos = 
            this.CrystalReportViewer1.LogOnInfo;

            foreach (CrystalDecisions.Shared.TableLogOnInfo TableLogon in 
             TableLoginInfos)
            {
                    TableLogon.ConnectionInfo = connectinfo;
            }

            rptfile.SetParameterValue(@"param1", Class1.param1);
            rptfile.SetParameterValue(@"param2", Class2.param2);

            this.CrystalReportViewer1.HasToggleGroupTreeButton = false;
            this.CrystalReportViewer1.HasToggleParameterPanelButton = false;
            this.CrystalReportViewer1.ToolPanelView = ToolPanelViewType.None;
        }


Внутри вашего web. config (чтобы помочь веб-серверу легко найти путь),

<configuration>
  <configSections>
    <sectionGroup name="businessObjects">
      <sectionGroup name="crystalReports">
        <section name="rptBuildProvider" type="CrystalDecisions.Shared.RptBuildProviderHandler, CrystalDecisions.Shared, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304, Custom=null" />
        <section name="crystalReportViewer" type="System.Configuration.NameValueSectionHandler" />
      </sectionGroup>
    </sectionGroup>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <businessObjects>
    <crystalReports>
      <rptBuildProvider>
        <add embedRptInResource="true" />
      </rptBuildProvider>
      <crystalReportViewer>
        <add key="ResourceUri" value="/crystalreportviewers13" />
      </crystalReportViewer>
    </crystalReports>
  </businessObjects>
</configuration>


Member 13406906

Спасибо за ваш ответ.
В принципе, я просто хочу экспортировать отчет в xls-файл, и я не имею ничего общего с CrystalReportViewer.
Во время отладки я видел, что в наборе данных действительно есть данные, но что-то пошло не так с методом SetDataSource..