我有一个物理数据集文件,我在其中执行了此操作:
在CR设计器中,我将该数据集设置为这样的源:
我在c#代码中面临的问题是在这一行:
document.SetDataSource(rv);
其中document是预加载的CR文档,rv是在上述行之前看起来像这样的数据集:
最后,当我走到那条线时,我得到了这个错误。甚至没有例外......
任何人都可以帮我吗?
这是我的代码:
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>
但是仍然,我的报告是空的!什么都没有显示!
答案 0 :(得分:1)
尝试在表格中添加名称。在模板中,您使用名为TestDataTable
的表,但DataSet中没有此类表(预览显示它名为Table1
)。