我在报告中添加了公式字段region,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();
}
答案 0 :(得分: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);
}
在c#代码中编写公式时要小心dataType和解析,例如,如果要动态显示公式中的某些文本,则需要使用引号来转换数据
赞report.DataDefinition.FormulaFields["yourformula"].Text ="'Hello world'";
不要忘记引号,简单或双引号都可以。
致以最诚挚的问候,