2016-08-11 4 views
1

добавить формулу поле области, FromDate, Todate в докладезначения Pass в Crystal Report

т.е. обновленного изображения

UPDATED IMAGE

Также я стараюсь это другой метод:

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); 

     } 

Это сообщение ошибки на странице:

Ошибка

error image

Это название поля не известно. Подробности: 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(); 
    } 

ответ

2

Вы можете отчет создания экземпляра как объект, заменить свою линию:

ReportDocument crystalReport = new ReportDocument(); 

По :

data crystalReport = new 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'"; Не забывайте, что кавычки, простые или двойные кавычки будут работать.

С наилучшими пожеланиями,

+0

пожалуйста, проверьте обновить эту же ошибку шоу @Furtiro – user6628729

+0

@ user6628729 Пожалуйста, проверьте мой обновленный ответ и скажите мне, если он работает – Furtiro

+0

проверить мой обновленный код я попробовать свой код и это шоу ту же ошибку – user6628729