2016-03-23 16 views
10

Kullanıcı formundan rapor sınıfım için bir sql parametresi iletmek istiyorum ancak çalışmıyor ve rapor oluşturmuyor ve rapor sınıfına ID argümanı ekledikten sonra rapor tasarımcısı sekmesini tekrar açtığımda raporu yenilemek ve bileşenlerimı sil.Raporun çıktısını almak için bir sql parametresi değeri iletin mi?

Sorun nedir? İşte

raporum sınıftır:

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 

Ve burada satıyorum: Ben size (1) düğmesini istediğiniz tahmin

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

Raporu ayrı ayrı tasarlamanız gerektiğini düşünüyorum. Sadece 'yeni DevExpress.XtraReports.UI.XtraReport();' kullanarak, veri kaynağınızı nasıl kullanacağını, verileri nasıl görüntüleyeceğini bilmediği için yapamazsınız. 'DevExpress.XtraReports.UI.XtraReport raporu = new your_report_design_class(); geçmişte bu tür şeyleri kullanılan' ben geride Benim kod kendisine – minhhn2910

cevap

1

, (2) (daha sonra bir kimlik geçmesi 3) raporu açtığınızda içeriğin bu ID'ye bağlı olması.

  1. sizin veri kümesini Tasarım, bu veri kümesi kullanarak göstermek istiyorum sadece bilgi içerir: (DevExpress açık kaynak olmadığı için emin değilim başka bir yolu var olduğu) Yani bu ben yaptım yoldur Visual Studio'nun aracı. yani kimlik, isim, adres, ..... Veri kümesinin adı = ReportDataset. Bu veri kümesinin MyTable adlı 1 tablosu var.
  2. GUI aracını kullanarak MyReport adlı raporunuzu tasarlayın (XtraReport'u seçmeyi unutmayın) ve veri kaynağını seçin = o ReportDataset, GUI aracı tarafından oluşturulan kodu düzenlemez. Sadece GUI'yi kullanın, etiket eklemek için & tıklayın, ReportDataset'den değer ekleyin.
  3. sen, pencere formu ya da her neyse oluştururlar olarak, aşağıda (sizin Sorunuzun son snippet'te "çağıran") button_click olay tetiklediği işlevi içinde olmalıdır: Yukarıdaki

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

rapor kendi veri kümesini farklı tabloların karışımı ile kullanabildiğinden daha esnek hale getirmektir. 1. Adım 1'de kendi veri kümenizi yeniden kullanarak daha kolay bir hale getirebilirsiniz.

+0

bir veri kaynağı atamadan önce benim tasarımıyla yeni bir rapor oluşturmak zorunda ReportDataset'e ulaşamıyorum çünkü rapor tasarımcısında oluşturdum. –

+0

Karmaşa için özür dilerim, dışarıdaki veri kaynağını yaratın ve sonra raporunuza atayın (.xsd dosyasını kullanarak), Visual Studio'ya erişimim yok, bu yüzden söyleyemiyorum. https://documentation.devexpress.com/#XtraReports/CustomDocument4797 – minhhn2910

+0

Veri kümesini oluşturun ve şu şekilde .xsd dosyası olarak kaydedin: https://msdn.microsoft.com/en-us/library/ms171897.aspx – minhhn2910