Вопрос по crystal-reports, vb.net – Как передать параметры в отчет Crystal из кода vb.net

2

Я создал отчет Crystal (кросс-таблица). Я не использую какой-либо набор данных, вместо этого я использовал мастер в Crystal Report для вызова процедуры из моей схемы базы данных. (Предоставленный поставщик - это поставщик Microsoft OLEDB для oracle, после которого я дал свои учетные данные БД (т. Е. Схему, имя пользователя, пароль), выбрал процедуру и выбрал столбцы, которые хотел отобразить в отчете).

Есть 5 параметров, которые мне нужно передать из внешнего интерфейса для создания отчета. При просмотре предварительного просмотра отчета Crystal, предоставляя параметры, отчет работает нормально.

Теперь я хочу передать эти 5 параметров из внешнего интерфейса (vb.net), чтобы показать отчет в CrystalReportViewer. Пожалуйста, предложите код для записи в файле aspx.vb. (PS: - Я прошел через другие форумы и обнаружил некоторый код, но все они выдавали ту или иную ошибку, поэтому я публикую такую, чтобы я мог получить код, соответствующий моим требованиям).

Заранее спасибо..

я отредактировал свой вопрос ... Gunner
Я попробовал то, что было написано в первой ссылке, но в ней они объявляют набор данных и устанавливают источник данных отчета как набор данных, но я не вижу, как они заполняют набор данных. Также я не использую какой-либо набор данных, но вызываю процедуру при выполнении Crystal Report (.rpt) с использованием поставщика oledb .... Gunner
Пожалуйста, обратитесь к следующим темам для справки: & gt; [Подсказка: как передать параметры Crystal Report программно? ] (c-sharpcorner.com/UploadFile/mahesh/paramInCR11012006132839PM/…) ИЛИ & gt;How to pass discrete parameters to Crystal Reports hims056
@Gunner Привет, вы используете параметры хранимых процедур для отчета или просто отчет Crystal? Androidz

Ваш Ответ

2   ответа
4

Я написал код ниже:

    Dim RptDocument As New ReportDocument

    RptDocument.Load(Server.MapPath("rpt\Report.rpt"))

    RptDocument.SetParameterValue("param1", Session("param1"))
    RptDocument.SetParameterValue("param2", ddlparam2.SelectedValue)
    RptDocument.SetParameterValue("param3", param3.text)
    RptDocument.SetParameterValue("param4", param4.text)
    RptDocument.SetParameterValue("param5", param5.text)

    'Set login info
    Dim myLogin As CrystalDecisions.Shared.TableLogOnInfo

    Dim myTable As Table
    For Each myTable In RptDocument.Database.Tables
        myLogin = myTable.LogOnInfo
        myLogin.ConnectionInfo.ServerName = "server name"
        myLogin.ConnectionInfo.DatabaseName = ""
        myLogin.ConnectionInfo.UserID = "userid"
        myLogin.ConnectionInfo.Password = "pwd"
        myTable.ApplyLogOnInfo(myLogin)
        myTable.Location = myTable.Location

    CrystalReportViewer1.ReportSource = RptDocument

Создал Системный DNS и должен был добавитьOracle.DataAccess.dll для ссылки и файла класса (с такими же функциями, как в файле класса connectooracle.vb, но с другим именем), также установите соединение в global.asax для ссылки на соединение этого класса и используя Imports Oracle.DataAccess.Client вместоImports System.Data.OracleClient (чтобы избежать двусмысленности) ...

Это как-то заставило его работать, и для этого может быть какое-то другое решение :)

(For ref:- Adding  myLogin.ConnectionInfo.IntegratedSecurity = True  gave me this error--
Logon failed. Error in File C:\DOCUME~1\Username\LOCALS~1\Temp\Report {1AG3DD86-141D-43YA-B6A2-AEDF3459AE49}.rpt: Unable to connect: incorrect log on parameters.)
приведенный выше код также является правильным. Gunner
1

и я использую Visual Studio 2008 для этого, поскольку VS2010 не имеет Crystal Engine для справки.

Сначала убедитесь, что вы импортировали эти два:

Imports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.Shared

Теперь, с моей стороны, я использовалodbc потому что, как я заметил, Crystal Report прекрасно работает с этим, и так как мы работаем с odbc. Поэтому я не включил свойство входа в отчет в своем коде. В отчете просто выберите соединение ODBC.

Private Sub ReportViewer_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Dim cryRpt As New ReportDocument

        Dim str1 As String


Try
            str1 = Title.str1
            str2  =Title.str2


            cryRpt.Load("c:\Program Files\Report\" & str2 & "")


            Dim crParameterFieldDefinitions As ParameterFieldDefinitions
            Dim crParameterFieldDefinition As ParameterFieldDefinition
            Dim crParameterValues As New ParameterValues
            Dim crParameterDiscreteValue As New ParameterDiscreteValue


                crParameterDiscreteValue.Value = strStore
                crParameterFieldDefinitions = cryRpt.DataDefinition.ParameterFields
                crParameterFieldDefinition = crParameterFieldDefinitions.Item("Store")
                crParameterValues = crParameterFieldDefinition.CurrentValues

                crParameterValues.Clear()
                crParameterValues.Add(crParameterDiscreteValue)
                crParameterFieldDefinition.ApplyCurrentValues(crParameterValues)


            rptviewer.Cursor = Cursors.AppStarting
            rptviewer.ReportSource = cryRpt
            rptviewer.Refresh()
            rptviewer.Cursor = Cursors.Default
        Catch ex As Exception
            MsgBox(ex.Message)
            Me.Close()
            ReportInterface.Show()
        End Try
    End Sub

У меня есть класс, который будет получать данные, введенные пользователем. Но это не будет работать с использованием параметров хранимой процедуры.

please mark as accepted if it works for you

Благодарю вас

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

Похожие вопросы