【问题标题】:Pass a sql parameter value to devexpress report?将sql参数值传递给devexpress报告?
【发布时间】:2016-03-23 18:55:50
【问题描述】:

我想将用户表单中的 sql 参数传递给我的报表类,但它不工作,也没有创建报表,当我在报表类中添加 ID 参数后再次打开报表设计器选项卡时,它会刷新报表并删除我的组件。

有什么问题?

这是我的报告类:

public SodoorZemanatName(long ID)
    {
        InitializeComponent(ID);
    }

    protected override void Dispose(bool disposing)
    {
        if (disposing && (components != null))
        {
            components.Dispose();
        }
        base.Dispose(disposing);
    }

    #region Designer generated code
    private void InitializeComponent(long ID)
    {
            this.components = new System.ComponentModel.Container();
            DevExpress.DataAccess.Sql.CustomSqlQuery customSqlQuery1 = new DevExpress.DataAccess.Sql.CustomSqlQuery();
            DevExpress.DataAccess.Sql.QueryParameter queryParameter1 = new DevExpress.DataAccess.Sql.QueryParameter();
            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SodoorZemanatName));
            this.topMarginBand1 = new DevExpress.XtraReports.UI.TopMarginBand();
            this.detailBand1 = new DevExpress.XtraReports.UI.DetailBand();
            this.bottomMarginBand1 = new DevExpress.XtraReports.UI.BottomMarginBand();
            this.sqlDataSource2 = new DevExpress.DataAccess.Sql.SqlDataSource(this.components);
            ((System.ComponentModel.ISupportInitialize)(this)).BeginInit();
            this.topMarginBand1.HeightF = 100F;
            this.topMarginBand1.Name = "topMarginBand1";
            this.detailBand1.HeightF = 100F;
            this.detailBand1.Name = "detailBand1";
            this.bottomMarginBand1.HeightF = 100F;
            this.bottomMarginBand1.Name = "bottomMarginBand1";
            this.sqlDataSource2.ConnectionName = "Context";
            this.sqlDataSource2.Name = "sqlDataSource2";
            customSqlQuery1.Name = "Query";
            queryParameter1.Name = "ID";
            queryParameter1.Type = typeof(long);
            queryParameter1.ValueInfo = "0";
            queryParameter1.Value = ID;
            customSqlQuery1.Parameters.Add(queryParameter1);
            customSqlQuery1.Sql = "select * from LG_Garanti where ID=@ID";
            this.sqlDataSource2.Queries.AddRange(new DevExpress.DataAccess.Sql.SqlQuery[] {
            customSqlQuery1});
            this.sqlDataSource2.ResultSchemaSerializable = resources.GetString("sqlDataSource2.ResultSchemaSerializable");
    this.Bands.AddRange(new DevExpress.XtraReports.UI.Band[] {
    this.topMarginBand1,
    this.detailBand1,
    this.bottomMarginBand1});
    this.ComponentStorage.AddRange(new System.ComponentModel.IComponent[] {
    this.sqlDataSource2});
    this.DataSource = this.sqlDataSource2;
    this.Version = "15.2";
    ((System.ComponentModel.ISupportInitialize)(this)).EndInit();
}
#endregion

这是我的使命:

SodoorZemanatName report = new SodoorZemanatName(1);
ASPxDocumentViewer1.ReportTypeName = "SodoorZemanatName";
ASPxDocumentViewer1.Report = report;

【问题讨论】:

  • 我认为你需要单独设计报表。简单地使用new DevExpress.XtraReports.UI.XtraReport();可能不行,因为它不知道如何使用你的数据源,如何显示数据。 DevExpress.XtraReports.UI.XtraReport report = new your_report_design_class();我以前用过这种东西,我必须先用我的设计创建新的报告,然后再为其分配数据源

标签: c# webforms devexpress report


【解决方案1】:

我猜您想 (1) 单击按钮,(2) 传递一个 ID,然后 (3) 打开报告的内容取决于该 ID。所以这就是我这样做的方式,(我不确定是否有任何其他方式,因为 devexpress 不是开源的):

  1. 设计您的数据集,它只包含您希望使用 Visual Studio 的数据集工具显示的信息。即 id、name、address ......命名该数据集 = ReportDataset。该数据集有 1 个名为 MyTable 的表。
  2. 使用 GUI 工具设计名为 MyReport 的报告(记得选择 XtraReport),并选择数据源 = ReportDataset,不要编辑 GUI 工具生成的代码。只需使用 GUI,单击并单击以添加标签,从 ReportDataset 添加值。
  3. 在您的表单、窗口表单或其他任何形式中,以下内容应位于由 button_click 事件触发的函数内(您在问题的最后一个 sn-p 中的“调用”):

    DataSet new_ds = new DataSet();
    ReportDataset.MyTable runtime_data = new ReportDataset.MyTable();
    //get data from your database according to ID, Row by row 
    //then add them to the runtime_data table
    //in your case, add all the result of "select * from LG_Garanti where ID=@ID";
    runtime_data.Rows.Add(new object[] {.blah blah..});// just add row, use whatever method you like
    new_ds.Tables.Add(runtime_data);
    //from this point, new_ds contains runtime data of the row(s) you want ID.
    //now just link that dynamic dataset to your designed report
    MyReport my_report = new MyReport();
    my_report.DataSource = new_ds;
    // Show the print preview or do whatever you want 
    ReportPrintTool printTool = new ReportPrintTool(my_report);
    printTool.ShowRibbonPreviewDialog();
    

以上是为了使其更加灵活,因为报表可以使用自己的数据集和不同表的混合,....您可以通过在步骤 1 中重用自己的数据集来使其更容易。希望这会有所帮助。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-21
  • 1970-01-01
  • 2010-11-07
  • 2020-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多