Как подцепить отчет к контролу stiPreviewControl ?

Обсуждение Stimulsoft Reports.NET
vlsaf
Сообщения: 46
Зарегистрирован: 26 июн 2008, 09:17

Как подцепить отчет к контролу stiPreviewControl ?

Сообщение vlsaf »

Пробую передать строку соединения.
Если я по событию Click кнопки делаю так:

Код: Выделить всё

StiReport report = new StiReport();
report.Load(reportName);
((StiSqlDatabase)report.Dictionary.Databases[0]).ConnectionString = builder.ConnectionString;
report.Show();
все ok.

Но если же я по тому же событию Click из текущего окна вызываю другое окно:

Код: Выделить всё

PrintForm printForm = new PrintForm();
printForm.Show();
и уже в новом окне делаю все тоже самое,
строка соединения builder.ConnectionString не передается.. Загадки природы.

Вообще-то я хотел в новом окне разместить stiPreviewControl и уже в нем все просматривать.
Но никак не получается передать строку соединения с базой. Не знаю, в чем м.б. проблема.

Вот полный текст:

Код: Выделить всё

private void PrintForm_Load(object sender, EventArgs e)
{
    #region report Load
    StiReport report = new StiReport();
    string reportPath_mrt = Application.StartupPath + @".\StimulReport\Rechnungswesen.mrt";
    string reportPath_dll = Application.StartupPath + @".\StimulReport\Rechnungswesen.dll";

    // если сборки отчета нет на диске
    if (!File.Exists(reportPath_dll))
    {
        // загружаем отчет из файла
        report.Load(reportPath_mrt);
        // компилиляция и сохранение отчета в dll
        report.Compile(reportPath_dll);
    }
    report = StiReport.GetReportFromAssembly(reportPath_dll);
    #endregion

    #region ConnectionString
    SaveLoadSqlConnectionVariable myVariables = new SaveLoadSqlConnectionVariable();

    SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
    builder.InitialCatalog = "AWIAS";

    builder.DataSource = myVariables.SeverName;
    builder.ConnectTimeout = myVariables.Timeout;
    builder.IntegratedSecurity = myVariables.IntegratedSecurity;
    if (!myVariables.IntegratedSecurity)
    {
        builder.Password = myVariables.Password;
        builder.UserID = myVariables.UserNameSQL;
    }
    #endregion

    ((StiSqlDatabase)report.Dictionary.Databases[0]).ConnectionString = builder.ConnectionString;
    stiPreviewControl1.Report = report;
    stiPreviewControl1.Show();
}
Отчет получается пустой т.к. хранимая процедура, которая у меня есть в отчете, не работает.
Что посоветуете?
Vital
Сообщения: 647
Зарегистрирован: 09 июн 2006, 12:23

Как подцепить отчет к контролу stiPreviewControl ?

Сообщение Vital »

Здравствуйте,

Если отчет уже скомпилирован, то нужно использовать следующий код:

Код: Выделить всё

((StiSqlDatabase)report.CompiledReport.Dictionary.Databases[0]).ConnectionString = builder.ConnectionString;
Чтобы сказать что то большее, мне нужно посмотреть на код отображения в Вашей форме просмотра отчета.

Спасибо.
vlsaf
Сообщения: 46
Зарегистрирован: 26 июн 2008, 09:17

Как подцепить отчет к контролу stiPreviewControl ?

Сообщение vlsaf »

Эта строка дает исключение.
ссылка на Null объект NullReferenceExeption.


Я только смотрю вашу систему, поэтому у меня в отчете только одна строка :)
Но для понимания это даже лучше

Код: Выделить всё



  
    
      
        AWIAS
        Data Source=SAFONOVMPC1\SQL2005_DEVED;Initial Catalog=AWIAS;Integrated Security=True;Connect Timeout=3
        AWIAS
        False
      
    
    
      
        Header
        
          firmaName,System.String
          anrede,System.String
          KundeName,System.String
          KundeStrasse,System.String
          KundeOrt,System.String
          postfach,System.String
          plzPstf,System.String
          postfachFlag,System.Int32
          fibukontonummer,System.Int32
          finanzAmtStNr,System.String
          datentext,System.String
          abbuchungstext,System.String
          fusstext,System.String
          barleistungstext,System.String
          kundenMwst,System.Single
        
        30
        
        Header
        AWIAS
        
        declare @ID uniqueidentifier
Set @ID = '43c259be-04cb-48dc-b1f8-4e100a9268ec'
exec Print_RechnungswesenHeader @ID
      
    
    
    
    
  
  
  
    
      None;Black;2;Solid;False;4;Black
      Transparent
      
        
          Transparent
          0,0.4,19,6.4
          
            
              Transparent
              0,0,19,0.6
              
              Arial,10
              None
              0,0,0,0
              0,0
              0,0
              Text1
              
              
              {Header.firmaName}
              Black
              
            
          
          
          0
          0
          Seitenkopf1
          
          
        
      
      
      96f7a45041674000845a1d6d3d5d8ed0
      1,1,1,1
      Seite1
      
      29.7
      21
      
      
        Arial,100
        [50:0:0:0]
      
    
  
  
  
    System.Dll
    System.Drawing.Dll
    System.Windows.Forms.Dll
    System.Data.Dll
    System.Xml.Dll
    Stimulsoft.Controls.Dll
    Stimulsoft.Base.Dll
    Stimulsoft.Report.Dll
  
  Bericht
  6/26/2008 4:32:50 PM
  6/26/2008 12:03:24 PM
  f2d72167b9a240daab643757b1d109c1
  Bericht
  Centimeters
  2008.1.200
  using System;
using System.Drawing;
using System.Windows.Forms;
using System.Data;
using Stimulsoft.Controls;
using Stimulsoft.Base.Drawing;
using Stimulsoft.Report;
using Stimulsoft.Report.Dialogs;
using Stimulsoft.Report.Components;

namespace Reports
{
    
    public class Bericht : Stimulsoft.Report.StiReport
    {
        
        public Bericht()
        {
            this.InitializeComponent();
        }
        #region StiReport Designer generated code - do not modify#endregion StiReport Designer generated code - do not modify
    }
}

  CSharp
  


vlsaf
Сообщения: 46
Зарегистрирован: 26 июн 2008, 09:17

Как подцепить отчет к контролу stiPreviewControl ?

Сообщение vlsaf »

сейчас в отчете сделал правильную строку соединения. В предпросмотре все ок.
Убрал из программы вот эту строку
//((StiSqlDatabase)report.CompiledReport.Dictionary.Databases[0]).ConnectionString = builder.ConnectionString;

Запускаю. Отчет пустой!!! ??? Что это может быть такое?
vlsaf
Сообщения: 46
Зарегистрирован: 26 июн 2008, 09:17

Как подцепить отчет к контролу stiPreviewControl ?

Сообщение vlsaf »

Если грузить отчет с правильной строкой соединения неважно из dll или из mrt,
то вот такой вариант прокатывает
После строки

Код: Выделить всё

report = StiReport.GetReportFromAssembly(reportPath_dll);
поставил строку

Код: Выделить всё

report.Render();
Отчет формируется.

Если же строка соединения не правильная, то Render дает ошибку.
Если я Render ставлю после
((StiSqlDatabase)report.Dictionary.Databases[0]).ConnectionString = builder.ConnectionString;
report.Render();
(в случае, если отчет грузится не из dll), то отчет получается пустым.

Если же отчет грузится из dll, то как я и писал, строка
((StiSqlDatabase)report.CompiledReport.Dictionary.Databases[0]).ConnectionString = builder.ConnectionString;
Выдает исключение - ссылка на null объект.



Edward
Сообщения: 930
Зарегистрирован: 09 июн 2006, 12:23

Как подцепить отчет к контролу stiPreviewControl ?

Сообщение Edward »

Здравствуйте.

Метод Show() отчета всегда проверяет, был ли отчет скомпилирован (метод Compile), вызывался ли после этого метод Render.
Компиляция строит из шаблона отчета класс, который записывается в report.CompiledReport свойство.

Если отчет загружается из сборки, то он уже сам является скомпилированным, у него report == report.CompiledReport

Поэтому в скомпилированном отчете возможно изменить ConnectionString только следующим образом:

Код: Выделить всё

report.Compile();
((StiSqlDatabase)report.CompiledReport.Dictionary.Databases[0]).ConnectionString = builder.ConnectionString;
Спасибо.
vlsaf
Сообщения: 46
Зарегистрирован: 26 июн 2008, 09:17

Как подцепить отчет к контролу stiPreviewControl ?

Сообщение vlsaf »

на строке report.Compile(); выдается исключение "Report already compiled"

Строку соединения передать так и не могу.
Edward
Сообщения: 930
Зарегистрирован: 09 июн 2006, 12:23

Как подцепить отчет к контролу stiPreviewControl ?

Сообщение Edward »

Если отчет был загружен из assembly, то Compile() уже не может быть выполнен, поскольку компилировать нечего, загружен уже скомпилированный отчет.

report.Compile();

при загрузке из сборки вызывать не надо.

Спасибо.
vlsaf
Сообщения: 46
Зарегистрирован: 26 июн 2008, 09:17

Как подцепить отчет к контролу stiPreviewControl ?

Сообщение vlsaf »

Я гружу файл из dll.
Dll находится в в одном каталоге с exe файлом.
Больше нигде!

Dll файл я загружаю так
report = StiReport.GetReportFromAssembly(reportPath_dll);

Если после этого делать report.Compile(), то будет ошибка, о которой я писал выше.
Если не делать Compile(), то строка
((StiSqlDatabase)report.CompiledReport.Dictionary.Databases[0]).ConnectionString = builder.ConnectionString;
выдает исключение.

Изменить строку соединения так и не удается.
Прошу помощи.

Vital
Сообщения: 647
Зарегистрирован: 09 июн 2006, 12:23

Как подцепить отчет к контролу stiPreviewControl ?

Сообщение Vital »

Здравствуйте,

Дело в том что вот этот код:

Код: Выделить всё

report.Load(reportName);
((StiSqlDatabase)report.Dictionary.Databases[0]).ConnectionString = builder.ConnectionString;
абсолютно верен. Добавить к нему нечего.

Спасибо.
Ответить