Это работало правильно в Visual Studio 2008, но, поскольку я переключился на Visual Studio 2010 и Crystal Reports для Visual Studio 2010, мои переданные параметры игнорируются.
Они отображаются в отчете, просто игнорируются, когда дело доходит до формулы выбора! Вот мой код для создания отчета и передачи параметров.
private void Prepare()
{
var reportDocument = new ReportDocument();
string reportPath = string.Format(
"{0}\\{1}",
Globals.FormPath,
this.FormTemplate.Filename);
reportDocument.Load(reportPath);
ParameterDiscreteValue parameter;
foreach (var control in this.FormTemplateFieldControls)
{
switch (control.FormTemplateField.DataType)
{
case FormFieldDataType.Date:
this.AddParameterForDateTime(
reportDocument,
control.FormTemplateField.Name,
(DateTime)control.EditValue);
break;
case FormFieldDataType.DateTime:
this.AddParameterForDateTime(
reportDocument,
control.FormTemplateField.Name,
(DateTime)control.EditValue);
break;
case FormFieldDataType.Time:
this.AddParameterForDateTime(
reportDocument,
control.FormTemplateField.Name,
(DateTime)control.EditValue);
break;
case FormFieldDataType.Guid:
this.AddParameterForGuid(
reportDocument,
control.FormTemplateField.Name,
(Guid)control.EditValue);
break;
default:
this.AddParameterForString(
reportDocument,
control.FormTemplateField.Name,
control.EditValue.ToString());
break;
}
}
this.SetConnectionInfo(reportDocument);
var frm = new FormViewer();
frm.Report = reportDocument;
frm.ShowDialog();
frm.Dispose();
this.Close();
}
Когда я запускаю отчет от дизайнера, он работает просто отлично. Вы можете видеть, как передаются параметры, поскольку я отображаю их в своем отчете.
Для моих отчетов, которые запускаются из хранимых процедур, параметры, кажется, проходят просто отлично, это только те, которые составлены из всех таблиц.
Для чего это стоит, вот моя формула выбора:
{employee.HireDate} >= {?StartDate} And {employee.HireDate} <= {?EndDate}