1

我在报告中添加公式字段区域,从日期,到日期

更新的图像

更新的图像

我也尝试了另一种方法:

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

        }

这在页面上显示错误:

错误

错误图像

此字段名称未知。详细信息:文件 temp_2c6994eb-49ef-432f-bfd7-af0eb80dc7ec 4032_6896_{5E54477E-F078-41DF-BD52-AF042B96DA53}.rpt 中的 errorKind 错误:公式 fromdate 中的错误:'{DataTable1.StartDate}' 此字段名称未知。详细信息:错误种类

现在这终于在@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();
    }
4

1 回答 1

2

您可以像对象一样实例化您的报告,替换您的行:

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

    }

在 C# 代码中编写公式时要注意数据类型和解析,例如,如果你想在公式中动态显示一些文本,你需要用引号转换你的数据

就像report.DataDefinition.FormulaFields["yourformula"].Text ="'Hello world'"; 不要忘记引号一样,简单或双引号都可以。

最好的祝福,

于 2016-08-11T07:16:45.420 回答