1

レポートに数式フィールド 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);

        }

これはページにエラーを表示します:

エラー

エラー画像

このフィールド名は不明です。詳細: ファイル temp_2c6994eb-49ef-432f-bfd7-af0eb80dc7ec 4032_6896_{5E54477E-F078-41DF-BD52-AF042B96DA53}.rpt の errorKind エラー: 日付からの式のエラー: '{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();
    }
4

1 に答える 1

2

オブジェクトのようにレポートをインスタンス化し、行を置き換えることができます:

 ReportDocument crystalReport = new ReportDocument();

に :

data crystalReport = new data();

ここで data は、.rpt クラスの名前です。

*アップデート *

ReportDocument がオブジェクトであることを理解していません。ここでのオブジェクトはdataクラスになります。doc = crystalreportしたがって、crystalReport オブジェクトではなく他のオブジェクトで作業するため、設定したすべての行は役に立ちません。

2回目の更新:

数式へのアクセスが表示されませんでした。数式の名前に「@」を書く必要はありません。申し訳ありませんが、作業コードは次のとおりです。

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 と parse に注意してください。たとえば、数式にテキストを動的に表示する場合は、データを引用符でキャストする必要があります。

report.DataDefinition.FormulaFields["yourformula"].Text ="'Hello world'"; 引用符を忘れないように、単純または二重引用符が機能します。

よろしくお願いします、

于 2016-08-11T07:16:45.420 に答える