2015-04-17 3 views
4

У меня есть приложение C#, которое передает определенные параметры в отчет Crystal, а затем загружает отчет. Это все работает как ожидалось, но теперь у меня есть требование, чтобы приложение выполнялось против другой базы данных, кроме локальной базы данных.C# Crystal Reports ConnectionInfo и параметры

Я добавил информацию о подключении для отчета, но при загрузке отчета он теперь запрашивает параметры отчета. . Если я запускаю тот же код (с информацией соединения в) с локальной базой данных он работает правильно (без параметров подсказки Вот мой код:

 public frmReport(ReportDocument cryRpt, DateTime dFromDate, DateTime dToDate, 
     Int32 iEmployeeId, Int32 iRetentionDays, 
     Boolean bExTax, Boolean bShowDefinitions, DBase _oDbase, Log _oLog) 
    { 
     InitializeComponent(); 

     _oDBase = _oDbase; 

     iEmployeeIdReport = iEmployeeId; 

     TableLogOnInfos crtablelogoninfos = new TableLogOnInfos(); 
     TableLogOnInfo crtablelogoninfo = new TableLogOnInfo(); 
     ConnectionInfo crConnectionInfo = new ConnectionInfo(); 
     Tables CrTables; 

     string sWowPath = Wow6432Path(); 

     crConnectionInfo.ServerName = Registry.LocalMachine.OpenSubKey(@"Software" + sWowPath + "\\ShortCuts\\Database\\ShortcutsPOS").GetValue("Server").ToString(); ; 
     crConnectionInfo.DatabaseName = Registry.LocalMachine.OpenSubKey(@"Software" + sWowPath + "\\ShortCuts\\Database\\ShortcutsPOS").GetValue("Database").ToString(); ; 
     crConnectionInfo.UserID = Properties.Settings.Default.Username.ToString(); 
     crConnectionInfo.Password = Properties.Settings.Default.Password.ToString(); 

     CrTables = cryRpt.Database.Tables; 

     foreach (CrystalDecisions.CrystalReports.Engine.Table CrTable in CrTables) 
     { 
      crtablelogoninfo = CrTable.LogOnInfo; 
      crtablelogoninfo.ConnectionInfo = crConnectionInfo; 
      CrTable.ApplyLogOnInfo(crtablelogoninfo); 
     } 


     ParameterFields myParams = new ParameterFields(); 
     ParameterField paramFieldFrom = new ParameterField(); 
     ParameterField paramFieldTo = new ParameterField(); 
     ParameterField paramFieldEmployeeId = new ParameterField(); 
     ParameterField paramFieldRetentionDays = new ParameterField(); 
     ParameterField paramFieldExTax = new ParameterField(); 
     ParameterField paramFieldShowDefinitions = new ParameterField(); 

     ParameterDiscreteValue paramDiscreteValueFrom = new ParameterDiscreteValue();   
     ParameterDiscreteValue paramDiscreteValueTo = new ParameterDiscreteValue(); 
     ParameterDiscreteValue paramDiscreteEmployeeId = new ParameterDiscreteValue(); 
     ParameterDiscreteValue paramDiscreteValueRetentionDays = new ParameterDiscreteValue(); 
     ParameterDiscreteValue paramDiscreteValueEmployeeLevelList = new ParameterDiscreteValue(); 
     ParameterDiscreteValue paramDiscreteValueExTax = new ParameterDiscreteValue(); 
     ParameterDiscreteValue paramDiscreteValueShowDefinitions = new ParameterDiscreteValue(); 

     paramFieldFrom.Name = "FromDate"; 
     paramFieldTo.Name = "ToDate"; 
     paramFieldEmployeeId.Name = "EmployeeId"; 
     paramFieldRetentionDays.Name = "RetentionDays"; 
     paramFieldExTax.Name = "ExTax"; 
     paramFieldShowDefinitions.Name = "ShowDefinitions"; 

     paramDiscreteValueFrom.Value = dFromDate;      
     paramDiscreteValueTo.Value = dToDate; 
     paramDiscreteEmployeeId.Value = iEmployeeId; 
     paramDiscreteValueRetentionDays.Value = iRetentionDays; 
     paramDiscreteValueExTax.Value = bExTax; 
     paramDiscreteValueShowDefinitions.Value = bShowDefinitions; 

     paramFieldFrom.CurrentValues.Add(paramDiscreteValueFrom); 
     paramFieldTo.CurrentValues.Add(paramDiscreteValueTo); 
     paramFieldEmployeeId.CurrentValues.Add(paramDiscreteEmployeeId); 
     paramFieldRetentionDays.CurrentValues.Add(paramDiscreteValueRetentionDays); 
     paramFieldExTax.CurrentValues.Add(paramDiscreteValueExTax); 
     paramFieldShowDefinitions.CurrentValues.Add(paramDiscreteValueShowDefinitions); 

     myParams.Add(paramFieldFrom); 
     myParams.Add(paramFieldTo); 
     myParams.Add(paramFieldEmployeeId); 
     myParams.Add(paramFieldRetentionDays); 
     myParams.Add(paramFieldExTax); 
     myParams.Add(paramFieldShowDefinitions); 

     cryViewer.ParameterFieldInfo = myParams; 

     cryViewer.Refresh(); 

     cryViewer.ReportSource = cryRpt; 
    } 

Я добавлю, что местоположение отчета передается этому метод из другой формы, а затем по возврату этого запускается .Show().

EDIT: Ok просто запустил еще несколько тестов, и если мое соединение является машинным именем \ dbinstance, оно также не работает, но оно работает с локальным \ instancename. Объект команды в файле отчета имеет набор подключений (локальный) \ instancename, это проблема?

+0

Вы пытались установить параметры после настройки ReportSource? (например, 'cryViewer.ParameterFieldInfo [" FromDate "]. Добавить (paramDiscreteValueFrom)') – jjj

+0

Я отследил это до суб-отчета, имеющего свой собственный объект команды. Суб-отчет действительно не должен был быть дополнительным отчетом, поэтому я изменил это, и теперь я хороший – Stuart1044

ответ

0

Мой дополнительный отчет в этом c ase имел свой собственный объект команды, и это было проблемой. Я изменил отчет, поэтому дополнительный отчет больше не существует (был довольно простой и не обязательно был отдельным), и проблема была остановлена.