【问题标题】:Create XtraReports with parameters with: (stored procedures with parameters)使用以下参数创建 XtraReports:(带参数的存储过程)
【发布时间】:2019-12-15 02:52:37
【问题描述】:

我有一个与 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 上的参数部分,并将参数 ID 添加为 stringTYPE 作为 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 秒,这是不可接受的...... 它有效,但它不是正确的方法......

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

提前致谢。

阿尔弗雷德。

【问题讨论】:

    标签: c# stored-procedures parameters devexpress


    【解决方案1】:

    试试这个:

    • 设置连接字符串

      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)
      
    • 还要确保在 yor XtraReport 的最底部仅显示 DataSet(无数据成员,无表适配器..)

    【讨论】:

    • 您不需要在初始化报告后立即传递参数和Report.DataSource = dataset1.SP_get_singleRecord
    【解决方案2】:

    好吧,事实证明我得到了它的工作。 我不知道 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 });
    
        }
    

    这很有帮助!

    【讨论】:

    • XtraReport1 和 Dataset1 类型从何而来?
    猜你喜欢
    • 2013-05-25
    • 1970-01-01
    • 1970-01-01
    • 2020-02-12
    • 2018-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多