Проблемы с Crystal Reports, не отражающие изменения из базы данных SQL - PullRequest
0 голосов
/ 25 февраля 2019

Я новичок в создании отчетов с Crystal Reports в Visual Studio 2017. Я создал отчет для VS2017 под названием PersonnelListingReport.rpt с помощью мастера установки.С помощью мастера я выбрал таблицу, для которой будет основан отчет.Кроме того, я добавил параметр фильтра, который будет отображать только активных сотрудников, т. Е. (Active = 1, Inactive = 0).Так что теперь в моем окне предварительного просмотра основного отчета я вижу всех сотрудников с Status = 1. Моя проблема в том, что когда я добавляю или удаляю элемент в моем GridView, изменение не отражается в моем отчете.Вот что у меня в Page_Load:

Public Class PersonnelListingReportViewer
Inherits System.Web.UI.Page

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    Dim crystalReport As New ReportDocument()

    crystalReport.Load(Server.MapPath("PersonnelListingReport.rpt"))

    CrystalReportViewer1.ReportSource = crystalReport

End Sub

Вот что у меня под aspx для ReportViewer:

body>
<form id="form1" runat="server">
    <div>
        <CR:CrystalReportViewer ID="CrystalReportViewer1" runat="server" AutoDataBind="True" GroupTreeImagesFolderUrl="" Height="1202px" ReportSourceID="CrystalReportSource1" ToolbarImagesFolderUrl="" ToolPanelWidth="200px" Width="1104px" />
        <CR:CrystalReportSource ID="CrystalReportSource1" runat="server">
            <Report FileName="PersonnelListingReport.rpt">
            </Report>
        </CR:CrystalReportSource>
    </div>
</form>

Есть ли что-то, чего мне не хватает в моемкод?Я пытался использовать Refresh () и Load () в сообщениях на форуме с похожими проблемами, но безрезультатно.Я также прочитал сообщение на форуме о создании Page_Unload, затем в отчете вызывается метод Close () и затем Dispose (), но также безрезультатно.Я пытался установить флажок, чтобы Отменить сохраненные данные при загрузке отчетов, но все еще ничегоЯ знаю, что что-то упустил, но не совсем уверен, так как я впервые использую Crystal Reports в Visual Studio 2017. Спасибо, ребята!

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Создайте класс для установки значений входа в систему для отчета Crystal с помощью функции getreport (), которая возвращает документ отчета для отчета Crystal в заданном месте отчета.

 Module Logonvalues
    Function getpeport(ByVal ReportLocation As String) As ReportDocument
        Dim crconnectioninfo As ConnectionInfo = New ConnectionInfo()
        Dim cryrpt As ReportDocument = New ReportDocument()
        Dim crtablelogoninfos As TableLogOnInfos = New TableLogOnInfos()
        Dim crtablelogoninfo As TableLogOnInfo = New TableLogOnInfo()
        Dim CrTables As Tables
        cryrpt.Load(ReportLocation)
        cryrpt.DataSourceConnections.Clear()
        crconnectioninfo.ServerName = "ur servername"
        crconnectioninfo.DatabaseName = "ur database"
        crconnectioninfo.UserID =  "ur database username"
        crconnectioninfo.Password = "ur database password"
        CrTables = cryrpt.Database.Tables

        For Each CrTable As CrystalDecisions.CrystalReports.Engine.Table In CrTables
            crtablelogoninfo = CrTable.LogOnInfo
            crtablelogoninfo.ConnectionInfo = crconnectioninfo
            CrTable.ApplyLogOnInfo(crtablelogoninfo)
        Next

        Return cryrpt
    End Function
End Module

Наконец, мы вызовем значение входа в систему.из формы, состоящей из кристалла ReportViewer

Public Sub loadreport()
    Crvt_ApplicationReport.ReportSource = Logonvalues.getpeport("yourlocation")
    Crvt_ApplicationReport.SelectionFormula = "yourformula if any"
    Crvt_ApplicationReport.RefreshReport()
End Sub
0 голосов
/ 26 февраля 2019

Спасибо, ребята за совет.Мне удалось решить эту проблему, добавив это в мою Page_Load:

Dim cryRpt As New ReportDocument
    Dim crtableLogoninfos As New TableLogOnInfos
    Dim crtableLogoninfo As New TableLogOnInfo
    Dim crConnectionInfo As New ConnectionInfo
    Dim CrTables As Tables
    Dim CrTable As Table

    cryRpt.Load(Server.MapPath("PersonnelListingReport.rpt"))

    With crConnectionInfo
        .ServerName = "0.0.0.0"
        .DatabaseName = "TestDB"
        .UserID = "user"
        .Password = "pw"
    End With

    CrTables = cryRpt.Database.Tables
    For Each CrTable In CrTables
        crtableLogoninfo = CrTable.LogOnInfo
        crtableLogoninfo.ConnectionInfo = crConnectionInfo
        CrTable.ApplyLogOnInfo(crtableLogoninfo)
    Next

    CrystalReportViewer1.ReportSource = cryRpt
    CrystalReportViewer1.RefreshReport()
...