0

特定のアイテムの 1 日あたりの合計使用量のレポートを生成する asp.net Web ページで構成されるプロジェクトがあります。コードは VS 2008 の CR 9 で機能しましたが、VS 2010 で CR 13 に変換したため、レポートにパラメーターを追加するたびに、レポートに「パラメーター値がありません」というエラーがスローされます。パラメータはサブレポートにあります。レポートはパラメーターなしで正しく表示されます。[dt2にはレコードがあり、前述のコードの上に入力しました]最初に土曜日にのみ試しています。私が書いたコードは以下のとおりです-

crReport cr = new crReport();
cr.SetDatabaseLogon(gf.databaseUsername, gf.databasePass);
((ReportDocument)cr.Subreports["MenuReport"]).SetDataSource(dt2);
#region Parameter gathering
ParameterValues paramQuantity = new ParameterValues();
for (int i = 0; i < dt.Rows.Count; i++)
{
    dt2.Rows[i]["menuItemFK"] = jobBll.GetDataInfo("M_MenuItems", "id", dt.Rows[i]["menuItemFK"].ToString(), "menuItemName", true);
    string menuItemFK = dt.Rows[i]["menuItemFK"].ToString();
    string reportDate = dt.Rows[i]["reportDate"].ToString();
    DataTable dtQuntity = new DataTable();
    dtQuntity = jobBll.GetMenuItemDayUsage(menuItemFK, reportFrom, reportTo, "Saturday", true);
    ParameterDiscreteValue parameterDiscreteValue = new ParameterDiscreteValue();
    if (dtQuntity.Rows[0][0].ToString() != "")
        parameterDiscreteValue.Value = dtQuntity.Rows[0][0].ToString();
    else
        parameterDiscreteValue.Value = "0";
    paramQuantity.Add(parameterDiscreteValue);
}
#endregion
//cr.SetParameterValue("Sunday Quantity", paramQuantity, "MenuReport");
//cr.SetParameterValue("Monday Quantity", paramQuantity, "MenuReport");
//cr.SetParameterValue("Tuesday Quantity", paramQuantity, "MenuReport");
//cr.SetParameterValue("Wednesday Quantity", paramQuantity, "MenuReport");
//cr.SetParameterValue("Thursday Quantity", paramQuantity, "MenuReport");
//cr.SetParameterValue("Friday Quantity", paramQuantity, "MenuReport");
cr.SetParameterValue("saturdayQuantity", paramQuantity, "MenuReport");
crvReport.ReportSource = cr;     
crvReport.RefreshReport();

できるだけ早く私を助けてください。返信を待っています。ありがとう。

4

1 に答える 1

1

最後に、私はそれを機能させます。代わりに「cr」を「ReportDocument」オブジェクトとして宣言したか、「crReport.rpt」オブジェクトも cr.RefreshReport(); にコメントしたため、パラメータ値が消去されました。正しく動作するようになりました。レコードの個々のパラメーター値を表示するには、パラメーターの「表示文字列」式を次のように書きました-

StringVar Array Input:={?saturdayQuantity};
Input[RecordNumber];

C# コードは次のようになります。

ReportDocument cr = new ReportDocument();//
string reportPath = Server.MapPath("crReport.rpt");//
cr.Load(reportPath);//

((TextObject)cr.ReportDefinition.ReportObjects["reportFrom"]).Text = reportFrom;
((TextObject)cr.ReportDefinition.ReportObjects["reportTo"]).Text = reportTo;
cr.SetDatabaseLogon(gf.databaseUsername, gf.databasePass);

#region Parameter gathering
ParameterValues paramQuantity = new ParameterValues();
for (int i = 0; i < dt.Rows.Count; i++)
    {
        dt2.Rows[i]["menuItemFK"] = jobBll.GetDataInfo("M_MenuItems", "id", dt.Rows[i]["menuItemFK"].ToString(), "menuItemName", true);


        //GET OPENING & CLOSING STOCK TOTAL & ASSIGN BELOW
        string menuItemFK = dt.Rows[i]["menuItemFK"].ToString();
        string reportDate = dt.Rows[i]["reportDate"].ToString();

        DataTable dtQuntity = new DataTable();
        dtQuntity = jobBll.GetMenuItemDayUsage(menuItemFK, reportFrom, reportTo, "Saturday", true);

        ParameterDiscreteValue parameterDiscreteValue = new ParameterDiscreteValue();
        if (dtQuntity.Rows[0][0].ToString() != "")
            parameterDiscreteValue.Value = dtQuntity.Rows[0][0].ToString();
        else
            parameterDiscreteValue.Value = "0";

        paramQuantity.Add(parameterDiscreteValue);

    }

    cr.Subreports["MenuReport"].SetDataSource(dt2);

    ////cr.SetParameterValue("Sunday Quantity", paramQuantity, "MenuReport");
    ////cr.SetParameterValue("Monday Quantity", paramQuantity, "MenuReport");
    ////cr.SetParameterValue("Tuesday Quantity", paramQuantity, "MenuReport");
    ////cr.SetParameterValue("Wednesday Quantity", paramQuantity, "MenuReport");
    ////cr.SetParameterValue("Thursday Quantity", paramQuantity, "MenuReport");
    ////cr.SetParameterValue("Friday Quantity", paramQuantity, "MenuReport");
    cr.SetParameterValue("saturdayQuantity", paramQuantity, "MenuReport");

    ////cr.SetParameterValue("Sunday Rate", paramQuantity, "MenuReport");
    ////cr.SetParameterValue("Monday Rate", paramQuantity, "MenuReport");
    ////cr.SetParameterValue("Tuesday Rate", paramQuantity, "MenuReport");
    ////cr.SetParameterValue("Wednesday Rate", paramQuantity, "MenuReport");
    ////cr.SetParameterValue("Thursday Rate", paramQuantity, "MenuReport");
    ////cr.SetParameterValue("Friday Rate", paramQuantity, "MenuReport");
    ////cr.SetParameterValue("Saturday Rate", paramQuantity, "MenuReport");
    #endregion


    crvReport.ReportSource = cr;
    //crvReport.RefreshReport();//

編集したコードの行末に // を付けました。

于 2012-07-02T07:30:16.993 に答える