Crystal报表使用数据集在子报表中传递参数

时间:2009-12-24 05:57:58

标签: vb.net

我们使用没有子报告的数据集获得水晶报告的正确输出。但它不适用于子报告? 如何通过编码在vb.net中使用数据集传递水晶报告的子报告参数值? 我们使用Msaccess作为后端

请帮忙

3 个答案:

答案 0 :(得分:0)

我不确定你究竟在问什么,但是这里有一种设置创建,设置和传递params到水晶报告的方法

从数据库中加载标准数据集。 使用DateSet.WriteXmlSchema创建Xml架构。 使用visal studio工具Xsd.exe创建一个类型安全的DataSet。 将其导入您的项目。 将数据从数据库加载到新类型安全数据集中,并将其设置为报告数据源。

以下代码可让您设置参数

Private Sub foo()
  Dim parameterValues As New ParameterValues()
  parameterValues.Add("MyValue")
  MyDataSourceName.DataDefinition.ParameterFields("MyParamName").ApplyCurrentValues(parameterValues)
End Sub

我希望这会有所帮助

答案 1 :(得分:0)

您可以将DataTable与数据集完全相同使用,或者如果您要使用数据集,则以下代码可以正常运行。

ReportDocument cryRpt = new Rep

ortDocument();
Cls_Bl_CalibrationHeader clCalibrationHeader = new Cls_Bl_CalibrationHeader();
ParameterFieldDefinitions crParameterFieldDefinitions;
ParameterFieldDefinition crParameterFieldDefinition;
ParameterValues crParameterValues = new ParameterValues();
ParameterDiscreteValue crParameterDiscreteValue = new ParameterDiscreteValue();
DataTable DT = null; 

reportPath = "\\Report.rpt";
cryRpt.Load(reportPath);

  DT = clClassName.M_GetByIDDate(sqlStr);                        
  cryRpt.SetDataSource(DT);
  DT = clClass.GetSubReportInfo();
  cryRpt.OpenSubreport("SubReport").SetDataSource(DT);

 crParameterDiscreteValue.Value = 1;
 crParameterFieldDefinitions = cryRpt.DataDefinition.ParameterFields;
 crParameterFieldDefinition = crParameterFieldDefinitions["Parameter", "SubReport"];
 crParameterFieldDefinition.CurrentValues.Clear();
 crParameterValues = crParameterFieldDefinition.CurrentValues;
 crParameterValues.Add(crParameterDiscreteValue);
 crParameterFieldDefinition.ApplyCurrentValues(crParameterValues);  


crystalReportViewer1.ReportSource = cryRpt;
crystalReportViewer1.DisplayGroupTree = false;
crystalReportViewer1.Refresh();

答案 2 :(得分:0)

:D我遇到了同样的问题然后我发现如果你在主要版本之前将DataSet设置为Subreports就可以了。