0

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

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

让我解释:

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

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

现在我转到 xtrareports 的 fieldList 上的参数部分,并添加参数IDasstringTYPEas 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_getSingleRecord”更改为“SP_getALLRecords”(没有参数)。这将返回大约 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 回答
0

尝试这个:

  • 设置连接字符串

    SP_get_singleRecord_TableAdapter.Connection.ConnectionString
    

    如果你有任何

  • 然后将其添加到您的按钮单击事件(到它的开头......)

    SP_get_singleRecord_TableAdapter.Fill(dataset1.Yourdatatable, Convert.ToInt32(lookUpEdit_Type.EditValue), lookUpEdit_id.EditValue.ToString())
    
  • 在您的 XtraReport 上删除您的数据适配器:

    dataAdapter(SP_get_singleRecord_TableAdapter)
    
  • 还要确保在你的最底部XtraReportDataSet显示(没有数据成员,没有表适配器..)

于 2013-04-23T10:06:33.473 回答