2016-03-23 7 views
10

Ich möchte einen SQL-Parameter vom Benutzerformular an meine Berichtsklasse übergeben, aber es funktioniert nicht und erstellt den Bericht nicht. Wenn ich die Berichtsdesigner-Registerkarte nach dem Hinzufügen des ID-Arguments zur Berichtsklasse erneut öffne, wird der Bericht aktualisiert lösche meine Komponenten.Übergeben Sie einen SQL-Parameterwert, um den Bericht zu dekomprimieren?

Was ist das Problem?

Hier ist mein Bericht Klasse:

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 [email protected]"; 
      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 

Und hier ist meine Berufung:

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

Ich denke, Sie müssen den Bericht separat entwerfen. Verwenden Sie einfach 'new DevExpress.XtraReports.UI.XtraReport();' kann nicht tun, weil es nicht weiß, wie Sie Ihre Datenquelle verwenden und wie Sie die Daten anzeigen. 'DevExpress.XtraReports.UI.XtraReport Bericht = new your_report_design_class();' ich diese Art der Sache in der Vergangenheit verwenden, muß ich neuen Bericht mit meinem Design erstellen, bevor Sie eine Datenquelle, um es – minhhn2910

Antwort

1

Ich denke, Sie wollen auf die Schaltfläche (1) klicken, (2) dann eine ID übergeben (3) Öffnen Sie den Bericht hat Inhalt von dieser ID abhängig. Das ist also die Art, wie ich es tat, (ich bin nicht sicher, dass es eine andere Möglichkeit, weil DevExpress nicht Open Source ist):

  1. Dataset Design, es enthält nur die Informationen, die Sie anzeigen möchten den Datensatz mit Werkzeug von Visual Studio. d. h. ID, Name, Adresse, ..... Name dieses Datensatzes = ReportDataset. Dieser Datensatz enthält 1 Tabelle namens MyTable.
  2. Entwerfen Sie Ihren Bericht namens MyReport mit dem GUI-Tool (denken Sie daran, XtraReport zu wählen), und wählen Sie die Datenquelle = das ReportDataset, bearbeiten Sie nicht den vom GUI-Tool generierten Code. Verwenden Sie einfach die GUI, klicken Sie auf &, klicken Sie auf, um Beschriftungen hinzuzufügen, und fügen Sie einen Wert aus dem ReportDataset hinzu.
  3. In Sie bilden, Fensterform oder was auch immer, die unten sollte innerhalb der Funktion von button_click Ereignisse ausgelöst werden (Ihre „Aufruf“ im letzten Schnipsel Ihrer Frage):

    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 [email protected]"; 
    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(); 
    

Die oben ist es flexibler zu machen, da der Bericht seinen eigenen Datensatz mit der Mischung verschiedener Tabellen verwenden kann. Sie können es einfacher machen, indem Sie Ihren eigenen Datensatz in Schritt 1 wiederverwenden. Hoffe, das hilft.

+0

In meinem Code hinter Zuweisen Ich kann auf ReportDataset nicht zugreifen, weil ich es im Berichtsdesigner erstellt habe. –

+0

Sorry für die Verwirrung, erstellen Sie die Datenquelle außerhalb dann zuweisen Sie es zu Ihrem Bericht (mit der .xsd-Datei), ich habe keinen Zugriff auf Visual Studio jetzt, so kann ich nicht sagen. https://documentation.devexxpress.com/#XtraReports/CustomDocument4797 – minhhn2910

+0

Erstellen Sie das Dataset und speichern Sie es als .xsd-Datei wie folgt: https://msdn.microsoft.com/en-us/library/ms171897.aspx – minhhn2910

Verwandte Themen