0

エクストラ レポートとパラメーターを含むストアド プロシージャに関する質問があります。

XtraReports を使用して間もないですが、多くのことを学びました。問題は、1 つのタスクを正しい方法で完了できていないことです。

説明させてください:

私の DataSet には、SP_get_singleRecord2 つのパラメーターが(@ID, @TYPE) /*string,int*/あり、テーブルに 6 つの列があるものがあります。

そこで、、、およびを xtraReport に追加dataset(dataset1)dataMember(SP_get_singleRecord)ますdataAdapter(SP_get_singleRecord_TableAdapter)。ウィザードを使用してフィールドを所定の位置に設定します。

ここで、xtrareports の fieldList のパラメーター セクションに移動し、パラメーターをIDasstringおよびTYPEas として追加しますint

次に、フィルター文字列に移動し、次のようにパラメーターを設定します。 [ID] = ?ID And [TYPE] = ?TYPE

ここで、windowsForm に移動します -> print_simplebuttonEvent_OnClick

次のようにパラメーターを黙って渡します。

private void btn_print_Click(object sender, EventArgs e)
    {
        //convert parameters from controls
        int type = Convert.ToInt32(lookUpEdit_Type.EditValue);
        string id = lookUpEdit_id.EditValue.ToString();

        // Create a report instance
        Xtrareport report = new Xtrareport();

        // Obtain a parameter, and set its value.
        report.ID.Value = id;
        report.TYPE.Value = type;

        // Hide the Parameters UI from end-users.
        report.ID.Visible=false;
        report.TYPE.Visible = false;

        // Show the report's print preview.
        report.ShowPreview();
    }

次に、次のようなエラー メッセージが表示されます。Error when trying to populate the datasource. The following exception was thrown: Procedure or function 'SP_getSingleRecord' expects parameter '@ID' which was not supplied.

それによると、渡したパラメーターはストアド プロシージャに到達しませんでした。レポートを印刷する前に単一のレコードを取得しようとしていますが、ここで何が欠けているのかわかりません...

私はそれを行う別の方法を試しましたが、それには「SP_getALLRecords」の「SP_getSingleRecord」を変更する必要があります(パラメーターなし)。それは約6500以上のレコードを返し、レポートの側面からそれらをフィルタリングしますが、それには9秒かかります.これは受け入れられません...動作しますが、正しい方法ではありません...

私は自分自身を明確にしたことを願っています。あなたが私を助けてくれることを願っています。

前もって感謝します。

アルフレッド。

4

2 に答える 2

0

まあ、私はそれを機能させたことがわかりました。devxpress と xtrareports が持つ特定の機能については知りませんでした。

これはレポート側でした。*両方のパラメーターは公開する必要があります。* @Milen Pavlovが言ったように、レポートにはデータメンバーが含まれていてはなりませんが、データソースとデータアダプターのみで取得しました。

private void XtraReport1_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e) {
       spGetSingleRecord_tableadapter.Fill(
            (this.DataSource as DataSet1).spGetSingleRecord, Parameters["ID"].Value.ToString(), Convert.ToInt32(Parameters["TYPE"].Value));
// the parameters are the ones on the report, not the stored procedure.

    }

そしてフォーム側:

private void button1_Click(object sender, EventArgs e) {
        XtraReport1 report = new XtraReport1();

        report.RequestParameters = false;
        report.ID.Value = lookupedit1.editvalue;
        report.TYPE.Value = lookupedit2.editvalue;
        report.ID.Visible = false;
        report.TYPE.Visible = false;

        report.ShowPreview();
        report.PrintingSystem.ExecCommand(DevExpress.XtraPrinting.PrintingSystemCommand.Parameters, new object[] { true });

    }

とても助かりました!

于 2013-04-23T21:30:53.987 に答える