使用数据集时无法正确绑定水晶报表,显示参数缺失

Posted

技术标签:

【中文标题】使用数据集时无法正确绑定水晶报表,显示参数缺失【英文标题】:Not able to bind crystal report properly when using dataset, showing parameters missing 【发布时间】:2015-09-11 20:21:19 【问题描述】:

当我使用DSN 作为数据源时,我的水晶报告工作正常。 问题是我现在正在使用数据集。数据集包含我需要的所有表,我正在使用存储过程从数据库中填充数据。 但是,以这种方式,它会抛出一个错误:“Missing Parameters”。

我正在执行以下操作:第 1 步:创建 Dataset1.xsd 并使用 data connections 从数据库中插入所有必需的 tables第 2 步 :给data source 报告使用database expert 作为Dataset1.xsd步骤 3:使用数据集中的存储过程填充数据,然后创建 Dataset1 的实例并合并数据集中的数据到Dataset 1 实例。

我从数据库中获取数据然后将其合并到Dataset1 实例并将其作为水晶报告的来源的代码如下:

Private Sub ReportByDataset(ByVal rptDoc As CrystalDecisions.CrystalReports.Engine.ReportDocument)

    'new code

    Dim myConnection As New SqlClient.SqlConnection()
    'myConnection.ConnectionString = "server= (local)\NetSDK;database=pubs;Trusted_Connection=yes"
    Dim ds As New DataSet1

    myConnection.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings("HighriseContractingWebConnectionString").ConnectionString
    myConnection.Open()
    Dim MyCommand As New SqlClient.SqlCommand()
    MyCommand.Connection = myConnection

    MyCommand.CommandText = "SP_Web_GetReportTables"
    MyCommand.CommandType = CommandType.StoredProcedure
    Dim MyDA As New SqlClient.SqlDataAdapter()
    MyDA.SelectCommand = MyCommand
    Dim myDS As New DataSet

    MyDA.Fill(myDS)
    myConnection.Close()


    ds.Tables("RABill_RPT").Merge(myDS.Tables(0), MissingSchemaAction.Ignore)
    myDS.Tables(0).Reset()
    ds.Tables("RA_bills").Merge(myDS.Tables(1), MissingSchemaAction.Ignore)
    ds.Tables("Work_Completion").Merge(myDS.Tables(2), MissingSchemaAction.Ignore)
    ds.Tables("contractor").Merge(myDS.Tables(3), MissingSchemaAction.Ignore)
    ds.Tables("WO_Header").Merge(myDS.Tables(4), MissingSchemaAction.Ignore)
    ds.Tables("Project").Merge(myDS.Tables(5), MissingSchemaAction.Ignore)
    ds.Tables("contractor_1").Merge(myDS.Tables(6), MissingSchemaAction.Ignore)
    ds.Tables("Users").Merge(myDS.Tables(7), MissingSchemaAction.Ignore)
    ds.Tables("Users_Approved").Merge(myDS.Tables(8), MissingSchemaAction.Ignore)
    ds.Tables("voucher").Merge(myDS.Tables(9), MissingSchemaAction.Ignore)
    ds.Tables("Employee_Approve").Merge(myDS.Tables(10), MissingSchemaAction.Ignore)
    ds.Tables("Employee").Merge(myDS.Tables(11), MissingSchemaAction.Ignore)
    ds.Tables("Account").Merge(myDS.Tables(12), MissingSchemaAction.Ignore)
    ds.Tables("TDS").Merge(myDS.Tables(13), MissingSchemaAction.Ignore)
    ds.Tables("WO_Detail").Merge(myDS.Tables(14), MissingSchemaAction.Ignore)
    ds.Tables("V_WO_BlockTaskNo").Merge(myDS.Tables(15), MissingSchemaAction.Ignore)
    ds.Tables("TASK").Merge(myDS.Tables(16), MissingSchemaAction.Ignore)
    ds.Tables("Cont_Voucher").Merge(myDS.Tables(17), MissingSchemaAction.Ignore)
    ds.Tables("Cont_Voucher_1").Merge(myDS.Tables(17), MissingSchemaAction.Ignore)
    ds.Tables("Cont_Voucher_2").Merge(myDS.Tables(17), MissingSchemaAction.Ignore)
    ds.Tables("Company").Merge(myDS.Tables(18), MissingSchemaAction.Ignore)


    ''new code ends


    rptDoc.SetDataSource(ds)
    CRReport.HasCrystalLogo = False
    CRReport.HasToggleGroupTreeButton = False
    CRReport.ReportSource = rptDoc
    CRReport.DataBind()

End Sub

但它不起作用,我错过了什么。使用DSN 也可以正常工作,这不是参数问题,其他方式也可以正常工作。注意:我知道上面的代码没有优化内存,但我现在关心的是如何让它工作,我以后可以优化它

下图显示 Dataset1 作为数据源

【问题讨论】:

这个问题是我们的家务事吗? 这不是家庭任务!!!是什么让你这么想。由于客户端的环境问题,我只需要让我的水晶报表以非 DNS 方式工作。 将数据源从 ODBC 更改为 XML/数据源 ***.com/questions/2803209/… 报表的数据源设置为 dataset1 【参考方案1】:

两种可能性 - 你在哪里得到参数丢失错误抛出?如果它在存储过程 SP_Web_GetReportTables 上,则不会在 MyCommand 上为该存储过程添加任何参数。如果它在报表本身上,请在报表本身一侧的字段资源管理器下检查,看看您是否在其中定义了任何参数,这些参数是使用 DSN 时遗留下来的。由于您现在直接传入数据集,因此不需要传入任何参数。最后,如果这是使用 Crystal Report Viewer,只需设置 ReportSource 即可显示它,我不确定 DataBind 是做什么用的你。

【讨论】:

正确;当datasource是ado.net时,report参数是多余的,必须去掉。【参考方案2】:

如果您创建新数据源并删除旧数据源,CR 也会删除与该数据源的查询参数相关的参数。最好换个数据源。

【讨论】:

根据我的经验,它不会删除它们。对我来说,这个过程是:1)为每个参数“在公式中查找”并删除用法。 2)在那之后,绿旗应该消失了。如果不是,将参数更改为另一种类型,检查数据库。 3)右键删除参数

以上是关于使用数据集时无法正确绑定水晶报表,显示参数缺失的主要内容,如果未能解决你的问题,请参考以下文章

[水晶报表]为水晶报表(含子报表)绑定数据

怎么使用和创建水晶报表 子报表?

水晶报表显示动态图片

vs asp.net水晶报表打印时无法显示条码

将子报表参数发送到水晶报表中的主报表参数

水晶报表 如何设置水晶报表 crystal reports 的字段自动换行