簡體   English   中英

C#Crystal Reports ConnectionInfo和Parameters

[英]C# Crystal Reports ConnectionInfo and Parameters

我有一個ac#應用程序,它將某些參數傳遞給Crystal報表,然后加載報表。 這一切都按預期工作,但我現在要求應用程序針對除本地數據庫之外的其他數據庫運行。

我已添加報告的連接信息,但在加載報告時,它現在提示輸入報告參數。 如果我對本地數據庫運行相同的代碼(帶有連接信息),它運行正確(沒有參數提示。這是我的代碼:

        public frmReport(ReportDocument cryRpt, DateTime dFromDate, DateTime dToDate,
        Int32 iEmployeeId, Int32 iRetentionDays, 
        Boolean bExTax, Boolean bShowDefinitions, DBase _oDbase, Log _oLog)
    {
        InitializeComponent();

        _oDBase = _oDbase;

        iEmployeeIdReport = iEmployeeId;

        TableLogOnInfos crtablelogoninfos = new TableLogOnInfos();
        TableLogOnInfo crtablelogoninfo = new TableLogOnInfo();
        ConnectionInfo crConnectionInfo = new ConnectionInfo();
        Tables CrTables;

        string sWowPath = Wow6432Path();

        crConnectionInfo.ServerName = Registry.LocalMachine.OpenSubKey(@"Software" + sWowPath + "\\ShortCuts\\Database\\ShortcutsPOS").GetValue("Server").ToString(); ;
        crConnectionInfo.DatabaseName = Registry.LocalMachine.OpenSubKey(@"Software" + sWowPath + "\\ShortCuts\\Database\\ShortcutsPOS").GetValue("Database").ToString(); ;
        crConnectionInfo.UserID = Properties.Settings.Default.Username.ToString();
        crConnectionInfo.Password = Properties.Settings.Default.Password.ToString();

        CrTables = cryRpt.Database.Tables;

        foreach (CrystalDecisions.CrystalReports.Engine.Table CrTable in CrTables)
        {
            crtablelogoninfo = CrTable.LogOnInfo;
            crtablelogoninfo.ConnectionInfo = crConnectionInfo;
            CrTable.ApplyLogOnInfo(crtablelogoninfo);
        }


        ParameterFields myParams = new ParameterFields();
        ParameterField paramFieldFrom = new ParameterField();
        ParameterField paramFieldTo = new ParameterField();
        ParameterField paramFieldEmployeeId = new ParameterField();
        ParameterField paramFieldRetentionDays = new ParameterField();
        ParameterField paramFieldExTax = new ParameterField();
        ParameterField paramFieldShowDefinitions = new ParameterField();

        ParameterDiscreteValue paramDiscreteValueFrom = new ParameterDiscreteValue();           
        ParameterDiscreteValue paramDiscreteValueTo = new ParameterDiscreteValue();
        ParameterDiscreteValue paramDiscreteEmployeeId = new ParameterDiscreteValue();
        ParameterDiscreteValue paramDiscreteValueRetentionDays = new ParameterDiscreteValue();
        ParameterDiscreteValue paramDiscreteValueEmployeeLevelList = new ParameterDiscreteValue();
        ParameterDiscreteValue paramDiscreteValueExTax = new ParameterDiscreteValue();
        ParameterDiscreteValue paramDiscreteValueShowDefinitions = new ParameterDiscreteValue();

        paramFieldFrom.Name = "FromDate";
        paramFieldTo.Name = "ToDate";
        paramFieldEmployeeId.Name = "EmployeeId";
        paramFieldRetentionDays.Name = "RetentionDays";
        paramFieldExTax.Name = "ExTax";
        paramFieldShowDefinitions.Name = "ShowDefinitions";

        paramDiscreteValueFrom.Value = dFromDate;                       
        paramDiscreteValueTo.Value = dToDate;
        paramDiscreteEmployeeId.Value = iEmployeeId;
        paramDiscreteValueRetentionDays.Value = iRetentionDays;
        paramDiscreteValueExTax.Value = bExTax;
        paramDiscreteValueShowDefinitions.Value = bShowDefinitions;

        paramFieldFrom.CurrentValues.Add(paramDiscreteValueFrom);
        paramFieldTo.CurrentValues.Add(paramDiscreteValueTo);
        paramFieldEmployeeId.CurrentValues.Add(paramDiscreteEmployeeId);
        paramFieldRetentionDays.CurrentValues.Add(paramDiscreteValueRetentionDays);
        paramFieldExTax.CurrentValues.Add(paramDiscreteValueExTax);
        paramFieldShowDefinitions.CurrentValues.Add(paramDiscreteValueShowDefinitions);

        myParams.Add(paramFieldFrom);
        myParams.Add(paramFieldTo);
        myParams.Add(paramFieldEmployeeId);
        myParams.Add(paramFieldRetentionDays);
        myParams.Add(paramFieldExTax);
        myParams.Add(paramFieldShowDefinitions);

        cryViewer.ParameterFieldInfo = myParams;

        cryViewer.Refresh();

        cryViewer.ReportSource = cryRpt;
    }

我將添加報表位置從另一個表單傳遞給此方法,然后在返回時運行.Show()。

編輯:好的只是運行了一些測試,如果我的連接是machinename \\ dbinstance它也不起作用,但它適用於(本地)\\ instancename。 報告文件中的命令對象具有(本地)\\ instancename的連接集,這是問題嗎?

在這種情況下,我的子報告有它自己的命令對象,這就是問題所在。 我已經更改了報告,因此子報告不再存在(非常基本,並不需要分開)並且問題已經停止。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM