如何在另一个 windows 表单或 crystal 报表 c# 中捕获项目级数据集

How to capture project level data-set in another windows form or crystal report form c#

我在我的许多 windows 数据网格表单中使用了一个数据集。如您所见,我创建了项目级数据集。

问题是我想在代码中恢复该数据集,以评估 crystal 报告的来源,如下所示。

       //sbmsDataSetAllis not recognized 

        ReportDocument cryRpt = new ReportDocument();
        cryRpt.Load("rystalReport1.rpt");
        cryRpt.SetDataSource(sbmsDataSetAll.Tables["recent_slide_dataset"].DataSet) ;
        crystalReportViewer1.ReportSource = cryRpt;
        crystalReportViewer1.Refresh();

好的,但您需要了解,您在解决方案资源管理器中看到的这些数据集项代表 class 类型(您可以创建的东西)而不是对象实例(您创建的东西),因此您只能使用代码中的对象实例

在创建数据集的表单上,使用一些代码,例如

 sbmsDataSetAll myDataset = new sbmsDatasetAll();

是数据集实例所在的位置。除非您通过方法参数将数据集传递到另一个地方,否则您只能在此表单的代码中 link 将其添加到报告中。

您真的应该将数据集中的 table 之一作为 crystal 报告数据源传递,除非您已经告诉 crystal 要使用什么 table 名称(在某处的设计模式下——我在你的代码中看不到它)。当您使用像这样的强类型数据集时,您不需要使用 .Tables 集合。集合中的每个 table 都有一个名为 属性 的 table:

    cryRpt.SetDataSource(sbmsDataSetAll.recent_slide_dataset) ;

您也不需要调用 table 的数据集 属性,因为它只是指向 table 所在的数据集,您已经知道何时选择了 table:

cryRpt.SetDataSource(sbmsDataSetAll) ;

作为另一个小批评,在 c# 中我们使用 PascalCase 的对象、属性 和方法名称,因此您的数据集实体实际上应该命名为:

cryRpt.SetDataSource(SbmsDataSetAll.RecentSlides) ;