尝试将数据集设置为水晶报表源时出错

时间:2016-08-29 11:43:51

标签: c# crystal-reports

我有一个物理数据集文件,我在其中执行了此操作:

enter image description here

在CR设计器中,我将该数据集设置为这样的源:

enter image description here

我在c#代码中面临的问题是在这一行:

document.SetDataSource(rv);

其中document是预加载的CR文档,rv是在上述行之前看起来像这样的数据集:

enter image description here

最后,当我走到那条线时,我得到了这个错误。甚至没有例外......

enter image description here

任何人都可以帮我吗?

这是我的代码:

private void GenerateReport_Click(object sender, EventArgs e)
        {
            try
            {
                CrystalDecisions.CrystalReports.Engine.ReportDocument document = null;
                document = new CrystalDecisions.CrystalReports.Engine.ReportDocument();
                document.Load(@"C:\output\CrystalReportTest.rpt");

                DataTable dt = new DataTable();
                dt.Columns.Add("FirstName");
                dt.Columns.Add("LastName");
                dt.Columns.Add("State");
                dt.Columns.Add("Town");
                dt.Columns.Add("ID");

                dt.Rows.Add(new object[] { "James", "Bond", "England", "London", "1233428749020" });
                dt.Rows.Add(new object[] { "Rocky", "Balboa", "USA", "Los Angeles", "471998425060" });
                dt.Rows.Add(new object[] { "Keyser", "Soze", "Hungary", "Budapest", "3643428747898" });

                List<DataTable> ldt = new List<DataTable>();
                ldt.Add(dt);


                System.Data.DataSet rv = new System.Data.DataSet();
                rv = AddTableInReportDataSet(ldt);

                if (rv != null)
                {
                    document.SetDataSource(rv);
                }
                document.ExportToDisk(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat, @"C:\output\Export_Test.pdf");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());

            }
        }

        private void SetMainReportDataSource(CrystalDecisions.CrystalReports.Engine.ReportDocument document, List<DataTable> tables)
        {
            if (tables.Count > 0)
            {
                DataSet reportDataSet = AddTableInReportDataSet(tables);
                document.SetDataSource(reportDataSet);
            }
        }

        private DataSet AddTableInReportDataSet(List<DataTable> tableList)
        {
            DataSet rv = new DataSet();
            tableList.ForEach(tbl => AddTableInReportDataSet(rv, tbl));
            return rv;
        }

        private void AddTableInReportDataSet(DataSet dataSet, DataTable table)
        {
            bool tableAlreadyAdded = dataSet.Tables.Cast<DataTable>().Where(tbl => tbl.TableName == table.TableName).Any();
            if (tableAlreadyAdded)
            {
                foreach (DataRow currentRow in table.Rows)
                {
                    dataSet.Tables[table.TableName].ImportRow(currentRow);
                }
            }
            else
            {
                dataSet.Tables.Add(table);
            }
        }

更新

这解决了我的问题,我将其添加到我的应用配置文件中:

 <startup useLegacyV2RuntimeActivationPolicy="true">
      <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  </startup>

但是仍然,我的报告是空的!什么都没有显示!

1 个答案:

答案 0 :(得分:1)

尝试在表格中添加名称。在模板中,您使用名为TestDataTable的表,但DataSet中没有此类表(预览显示它名为Table1)。