Передать значение в отчете Crystal
Я добавляю поле области формулы,fromdate,todate в отчет
то естьОБНОВЛЕНИЕ ИЗОБРАЖЕНИЯ
Также я попробую этот другой метод:
protected void Report_Click(object sender, EventArgs e)
{
data crystalReport = new data();
crystalReport.DataDefinition.FormulaFields["region"].Text = regiondrop.SelectedValue;
crystalReport.DataDefinition.FormulaFields["fromdate"].Text = fromdate.Value;
crystalReport.DataDefinition.FormulaFields["todate"].Text = todate.Value;
BindReport(crystalReport,Convert.ToDateTime(fromdate.Value), Convert.ToDateTime(todate.Value), regiondrop.SelectedValue);
}
Эта ошибка показа на странице:
ошибка
Имя этого поля не известно. Подробности: errorKind Ошибка в файле temp_2c6994eb-49ef-432f-bfd7-af0eb80dc7ec 4032_6896_{5E54477E-F078-41DF-BD52-AF042B96DA53}.rpt: Ошибка в формуле fromdate: '{DataTable1.StartDate}' это поле. Подробности: errorKind
Теперь это работает, наконец, с помощью @Furtiro
public void BindReport(ReportDocument crystalReport, DateTime fromdate, DateTime todate, string region)
{
T1 t = new T1();
DateTime fdate = new DateTime(fromdate.Year, fromdate.Month, fromdate.Day, 0, 0, 0);
DateTime tdate = new DateTime(todate.Year, todate.Month, todate.Day, 23, 59, 59);
List<griddataresult_Result> dsc = t.griddataresult(fdate, tdate, region).ToList();
DataTable dt = new DataTable();
dt.Columns.Add("ID", typeof(int));
dt.Columns.Add("OwnerName", typeof(string));
dt.Columns.Add("RegNo", typeof(string));
foreach (var c in dsc)
{
dt.Rows.Add(c.ID, c.OwnerName, c.RegNo, c.total_voilatio, c.MileageAccumlation, c.MaxSpeed);
}
crystalReport.DataDefinition.FormulaFields["region"].Text = "'" + region + "'";
crystalReport.DataDefinition.FormulaFields["fromdate"].Text = "'" + fromdate + "'";
crystalReport.DataDefinition.FormulaFields["todate"].Text = "'" + todate + "'";
crystalReport.SetDataSource(dt);
CrystalReportViewer1.ReportSource = crystalReport;
CrystalReportViewer1.DataBind();
}
1 ответ
Вы можете создать отчет как объект, заменив строку:
ReportDocument crystalReport = new ReportDocument();
От:
data crystalReport = new data();
Здесь data - это имя вашего класса.rpt.
*Обновить *
Вы не понимаете, что ReportDocument является объектом, ваш объект здесь будет вашим data
учебный класс. Так что все строки, когда вы установите doc = crystalreport
бесполезны, потому что вы работаете не с вашим объектом crystalReport, а с другими объектами.
Второе обновление:
Я не видел вашего доступа к формуле, вы не должны писать "@" в названии вашей формулы. К сожалению, вот ваш рабочий код:
protected void Report_Click(object sender, EventArgs e)
{
data crystalReport = new data();
crystalReport.DataDefinition.FormulaFields["region"].Text = "'" + regiondrop.SelectedValue.ToString() + "'";
crystalReport.DataDefinition.FormulaFields["fromdate"].Text = "'" + fromdate.Value.ToString() +"'";
crystalReport.DataDefinition.FormulaFields["todate"].Text = "'"+ todate.Value.ToString() + "'";
BindReport(crystalReport,Convert.ToDateTime(fromdate.Value), Convert.ToDateTime(todate.Value), regiondrop.SelectedValue);
}
Будьте осторожны с dataType и анализируйте, когда вы пишете формулу в коде C#, например, если вы хотите динамически отображать некоторый текст в формуле, вам нужно привести данные с кавычками
подобно report.DataDefinition.FormulaFields["yourformula"].Text ="'Hello world'";
Не забывайте цитаты, простые или двойные кавычки будут работать.
С наилучшими пожеланиями,