此种需求由于是通用需求,无需在传递的datatable中来实现。使用参数字段来实现更加方便。
使用参数字段需要注意几点。第一点,在水晶报表的设计界面要创建相应的参数字段。我使用的有三个参数字段。分别是@startdate,@enddate,@operator
第二,程序中的代码实现:
#region 水晶报表添加参数字段 开始日期 结束日期 操作员
ParameterFields paramFields = new ParameterFields();
ParameterField paramField = new ParameterField();
ParameterDiscreteValue discreteVal = new ParameterDiscreteValue();
// 开始日期参数
paramField.ParameterFieldName = "@startdate";
// 赋值
discreteVal.Value = reportParam.StartDate.ToString("yyyy-MM-dd");
paramField.CurrentValues.Add(discreteVal);
// 将该参数添加到参数字段集合。
paramFields.Add(paramField);
ParameterField paramField1 = new ParameterField();
ParameterDiscreteValue discreteVal1 = new ParameterDiscreteValue();
//开始日期参数
paramField1.ParameterFieldName = "@enddate";
//赋值
discreteVal1.Value = reportParam.EndDate.ToString("yyyy-MM-dd");
paramField1.CurrentValues.Add(discreteVal1);
// 将该参数添加到参数字段集合。
paramFields.Add(paramField1);
ParameterField paramField2 = new ParameterField();
ParameterDiscreteValue discreteVal2 = new ParameterDiscreteValue();
//开始日期参数
paramField2.ParameterFieldName = "@operator";
//赋值
discreteVal2.Value = Utility.LoginUserHelper.GetLoginUserInfo().Name;
paramField2.CurrentValues.Add(discreteVal2);
// 将该参数添加到参数字段集合。
paramFields.Add(paramField2);
// 将参数字段集合放入查看器控件。
CrystalReportViewer1.ParameterFieldInfo = paramFields;
#endregion
此段代码需要在
CrystalReportViewer1.ReportSource = rptdoc;
给水晶报表数据源赋值后执行。如果先执行,则打开水晶报表页面会要求你手动输入这三个值。而这个是没必要的,也不友好,从传入的变量获取就好