使用以下参数创建XtraReports :(带参数的存储过程)

时间:2013-04-22 17:23:55

标签: c# stored-procedures parameters devexpress

我有一个与Xtra Reports相关的问题和带参数的存储过程。

我一直在使用XtraReports,但我学到了很多东西。问题是我无法以正确的方式完成一项任务。

让我解释一下:

在我的DataSet中,我有一个SP_get_singleRecord,其中有2个参数(@ID, @TYPE) /*string,int*/,表格有6列。

因此,我将dataset(dataset1)dataMember(SP_get_singleRecord)dataAdapter(SP_get_singleRecord_TableAdapter)添加到xtraReport。 我使用向导来设置字段。

现在我转到xtrareports'fieldList的参数部分,我将参数ID添加为string,将TYPE添加为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秒,这是不可接受的...... 它有效,但它不是正确的方式......

我希望我已经清楚了。 我希望你能帮助我。

提前致谢。

阿尔弗雷德。

2 个答案:

答案 0 :(得分:0)

试试这个:

//设置连接字符串

SP_get_singleRecord_TableAdapter.Connection.ConnectionString

//如果你有任何

//然后将此添加到您的Button click事件(到它的开头......)

SP_get_singleRecord_TableAdapter.Fill(dataset1.Yourdatatable, Convert.ToInt32(lookUpEdit_Type.EditValue), lookUpEdit_id.EditValue.ToString())

//在XtraReport上删除数据适配器:dataAdapter(SP_get_singleRecord_TableAdapter)

//还要确保在XtraReport的最底部只显示DataSet(没有数据成员,没有表适配器..)

答案 1 :(得分:0)

好吧,事实证明我让它运转起来了。 我不知道devxpress和xtrareports有哪些特定功能。

这是在报告方面。 *两个参数都应该是公开的。 *正如@Milen Pavlov所说,报告必须没有datamembers,但我只使用数据源和数据适配器。

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

    }

非常有帮助!