Crystal reports 在Crystal报告中传递值

Crystal reports 在Crystal报告中传递值,crystal-reports,crystal-reports-2013,Crystal Reports,Crystal Reports 2013,我在报告中添加公式字段区域fromdate todate i、 e。 更新图像 public void BindReport(ReportDocument crystalReport, DateTime fromdate, DateTime todate, string region) { T1 t = new T1(); DateTime fdate = new DateTime(fromdate.Year, fromdate.Month, fro

我在报告中添加公式字段区域fromdate todate

i、 e。 更新图像

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

我还尝试了另一种方法:

 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}中的errorKind错误。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();
    }
public void BindReport(ReportDocument crystalReport、DateTime fromdate、DateTime todate、字符串区域)
{
T1 t=新的T1();
DateTime fdate=新的日期时间(fromdate.Year,fromdate.Month,fromdate.Day,0,0);
DateTime tdate=新的日期时间(todate.Year,todate.Month,todate.Day,23,59,59);
List dsc=t.griddataresult(fdate,tdate,region).ToList();
DataTable dt=新的DataTable();
添加(“ID”,typeof(int));
添加(“所有者名称”,类型(字符串));
添加(“RegNo”,typeof(string));
foreach(dsc中的var c)
{
添加(c.ID,c.OwnerName,c.RegNo,c.total,c.mileageacculation,c.MaxSpeed);
}
crystalReport.DataDefinition.FormulaFields[“region”]。Text=“”+region+”;
crystalReport.DataDefinition.FormulaFields[“fromdate”]。Text=“””+fromdate+“”;
crystalReport.DataDefinition.FormulaFields[“todate”]。Text=“”+todate+”;
SetDataSource(dt);
CrystalReportViewer1.ReportSource=crystalReport;
CrystalReportViewer1.DataBind();
}

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

 ReportDocument crystalReport = new ReportDocument();
作者:

这里的数据是您的.rpt类的名称

*更新*

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();
    }
如果您不理解ReportDocument是一个对象,那么这里的对象将是您的
数据
类。 因此,设置
doc=crystalreport
时的所有行都是无用的,因为您不处理crystalreport对象,而是处理其他对象

第二次更新:

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();
    }
我没有看到您访问公式的权限,您不应该在公式名称中写入“@”。很抱歉,这是您的工作代码:

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'”;
不要忘记引号,简单或双引号都可以


致以最诚挚的问候,

@user6628729请检查我的更新答案并告诉我它是否有效检查我的更新代码我尝试了你的代码并显示了相同的错误我在你的评论之前看到了这一点,抱歉,更新:)您好谢谢回复检查更新的图像和代码我尝试了你的解决方案,此显示错误此字段名称未知。详细信息:errorKind E文件temp_2c6994eb-49ef-432f-bfd7-af0eb80dc7ec 4032_6896{5E54477E-F078-41DF-BD52-AF042B96DA53}中的错误。rpt:公式fromdate中的错误:{DataTable1.StartDate}'此字段名未知。详细信息:errorkind实际上我用公式复制了您的代码和报告,如果我像第二次更新建议的那样添加引号,它就像一个符咒。因此我更新了答案并添加了一些引号。请告诉我它是否有效。