Отчет Crystal с набором объектных данных - PullRequest
0 голосов
/ 03 апреля 2012

Мне дали задание переписать некоторые Crystal Reports.Я нашел оригинальные отчеты примерно в 1999 году, открыл их в VS 2008, внес изменения и сохранил их.

Теперь они ссылаются на базу данных, которой больше нет.Итак, я удалил этот источник данных и добавил источник данных .NET OBJECT.Я изменил все вокруг так, чтобы поля теперь смотрели на этот новый источник данных.

Мое намерение состояло в том, чтобы создать отчет и во время выполнения передать его в виде данных.Эта таблица создается путем запуска созданного sproc.

Когда я запускаю ее, я получаю первую страницу отчета.Но когда я пытаюсь изменить страницы или распечатать, я получаю сообщение об ошибке:

Ошибка входа.Подробности: crdb_adoplus: ссылка на объект не установлена ​​для экземпляра объекта.Ошибка в файле C: ... \ MR01 {8E5164A9-4B01-4019-81E6-87AED65A02DF} .rpt: Невозможно подключиться: неверный вход в параметры

Вот мой код:

<CR:CrystalReportViewer ID="theCrystalReportViewer" visible="false" runat="server" EnableDatabaseLogonPrompt="false"   />


        Dim theDataTable As DataTable = tbl
        theDataTable.TableName = "tableName"
        Dim oReport As New ReportDocument

        Dim sRptPath As String = "...Reports\MR01.rpt"
        oReport.Load(sRptPath)
        oReport.SetDataSource(theDataTable)
        'oReport.SetDatabaseLogon("####", "####", "####", "#####")


        Dim c As ConnectionInfo = New ConnectionInfo()
        c.ServerName = "####"
        c.DatabaseName = "####"
        c.Password = "####"
        c.UserID = "####"
        c.Type = ConnectionInfoType.SQL
        c.IntegratedSecurity = False

        For i As Integer = 0 To theCrystalReportViewer.LogOnInfo.Count - 1
            theCrystalReportViewer.LogOnInfo(i).ConnectionInfo = c
        Next


        'theCrystalReportViewer.EnableDatabaseLogonPrompt = False
        'theCrystalReportViewer.DisplayGroupTree = False
        theCrystalReportViewer.ReportSource = oReport
        theCrystalReportViewer.DataBind()

        litMsg.Visible = False
        theCrystalReportViewer.Visible = True

Ответы [ 2 ]

0 голосов
/ 09 апреля 2012

JGauffin,

Как и Ли, мне любопытно, почему вы загружаете набор данных с данными хранимой процедуры, а не просто передаете учетные данные в Crystal Report.

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

Если вы удалите весь этот код ...

Dim c As ConnectionInfo = New ConnectionInfo()
c.ServerName = "####"
c.DatabaseName = "####"
c.Password = "####"
c.UserID = "####"
c.Type = ConnectionInfoType.SQL
c.IntegratedSecurity = False

For i As Integer = 0 To theCrystalReportViewer.LogOnInfo.Count - 1
theCrystalReportViewer.LogOnInfo(i).ConnectionInfo = c
Next

..., вы можете снова ввести этот удобный метод:

// this line needs you to replace these arguments with the valid values
oReport.SetDatabaseLogon("your", "valid", "settings", "here");

Тогда, если вы видите проблемы только с подкачкой, печатью и экспортом, вам следует убедиться, что вы продолжаете возвращать ReportSource обратно в представление.

if (!IsPostBack) 
{
// all your existing code should go in here
// this includes the SetDatabaseLogon etc.
// at the right moment, save your oReport in session
Session["myReportDocument"] = oReport;
theCrystalReportViewer.ReportSource = oReport;
}
else // we are posting back, so make sure the viewer still has the report object
{
theCrystalReportViewer.ReportSource = (ReportDocument)Session["myReportDocument"];
}

Надеюсь, это поможет вам правильнопуть.

0 голосов
/ 03 апреля 2012

Попробуйте выполнить следующие инструкции: http://vb.net -informations.com / crystal-report / vb.net_crystal_report_without_database.htm

Я думаю, вам тоже придется избавиться от этого:

    Dim c As ConnectionInfo = New ConnectionInfo()
    c.ServerName = "####"
    c.DatabaseName = "####"
    c.Password = "####"
    c.UserID = "####"
    c.Type = ConnectionInfoType.SQL
    c.IntegratedSecurity = False

    For i As Integer = 0 To theCrystalReportViewer.LogOnInfo.Count - 1
        theCrystalReportViewer.LogOnInfo(i).ConnectionInfo = c
    Next
...