KyLim0211 Ответов: 1

Код не удается связать с отчетом


Мой код не связывается с моим отчетом. Мне нужно передать параметр "T-ID" в отчет, но по какой-то причине я не могу получить никаких данных, когда нажимаю кнопку.

В Crystal Reports я могу получить данные после ввода параметра, но он не генерируется при запуске из моей программы. Как я могу это исправить?

<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
<CR:CrystalReportViewer ID="CrystalReportViewer1"  runat="server" AutoDataBind="true" />

protected void Button1_Click(object sender, EventArgs e)
{
    ReportDocument test = new ReportDocument();
    test.Load(Server.MapPath("On Job Training 1.rpt"));
    test.SetParameterValue("T-ID", TextBox1.Text);
    CrystalReportViewer1.ReportSource = test;
    CrystalReportViewer1.DataBind();
    CrystalReportViewer1.ReportSource = test;
}


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

Мой код не связывается с моим отчетом. Мне нужно передать параметр "T-ID" в отчет, но по какой-то причине я не могу получить никаких данных, когда нажимаю кнопку.

В Crystal Reports я могу получить данные после ввода параметра, но он не генерируется при запуске из моей программы. Как я могу это исправить?

1 Ответов

Рейтинг:
1

an0ther1

Я бы предположил, что отчет не использует соответствующие учетные данные для подключения к БД.
Это необходимо установить и передать в отчет, иначе он будет запускаться через текущий контекст, который зависит от учетной записи, под которой работает пул приложений.
Приведенный ниже код создает Crystal ConnectionInfo и применяет его к отчету

CrystalDecisions.Shared.ConnectionInfo connCrystal = new CrystalDecisions.Shared.ConnectionInfo();
connCrystal.ServerName = "MyServername";
connCrystal.DatabaseName = "MyDbName";
connCrystal.IntegratedSecurity = false;
connCrystal.UserID = "MyUserName";
connCrystal.Password = "MyPassword";

ReportDocument rptDoc = new ReportDocument();
rptDoc.Load(Server.MapPath("Path.rpt")):
CrystalDecisions.CrystalReports.Engine.Tables tblsReport = rptDoc.Database.Tables;
for(int i = 0; i < tblsReport.Count; i++)
{
    CrystalDecisions.CrystalReports.Engine.Table tblRpt = tblsRpt[i];
    TableLogOnInfo infoTable = tblRpt.LogOnInfo;
    infoTable.ConnectionInfo = connCrystal;
    tblRpt.ApplyLogOnInfo(infoTable);
}
// if you have sub reports you need to loop through them and apply the same log on info
if(rptDoc.SubReports.Count > 0)
{
    for(int i = 0; i < rptDoc.SubReports.Count; i++)
    {
        ReportDocument subReport = rptDoc.OpenSubReport(rptDoc.Subreports[i].Name);
        CrystalDecisions.CrystalReports.Engine.Tables tblsSubReport = subReport.Database.Tables;
        for(int ii = 0; ii < tblsSubReport.Count; ii++)
        {
            CrystalDecisions.CrystalReports.Engine.Table tblSubRpt = tblsSubReport[ii];
            TableLogOnInfo infoSubTable = tblsSubReport.LogOnInfo;
            infoSubTable.ConnectionInfo = connCrystal;
            tblsSubReport.ApplyLogOnInfo(infoSubTable);
        }
}


с уважением