2013-04-03 34 views
5

Chcę wykonać wiązanie datatable do reportviewer z kodem poniżej. Nie widzę wyników wyświetlanych w reportviewer, jaki jest brak skryptu poniżej?Jak powiązać datatable do środowiska wykonawczego reportviewer

// create dataset 
DataSet ds = new DataSet("myDataset"); 

// create datatable 
DataTable dt = new DataTable("myDatatable"); 

// add columns 
dt.Columns.Add("column1", typeof(string)); 
dt.Columns.Add("column2", typeof(string)); 
dt.Columns.Add("column3", typeof(string)); 

// insert data rows 
dt.Rows.Add("row1-col1", "row1-col2", "row1-col3"); 
dt.Rows.Add("row2-col1", "row2-col2", "row2-col3"); 

// add datatable to dataset 
ds.Tables.Add(dt); 

// bind datatable to report viewer 
this.reportViewer.Reset(); 
this.reportViewer.ProcessingMode = ProcessingMode.Local; 
this.reportViewer.LocalReport.ReportEmbeddedResource = "Test.Report1.rdlc"; 
this.reportViewer.LocalReport.DataSources.Clear(); 
this.reportViewer.LocalReport.DataSources.Add(new ReportDataSource(dt.TableName, dt)); 
this.reportViewer.RefreshReport(); 
+0

Masz to oznaczone tagiem WinForm, ale z C# -4.0 - czy to jest aplikacja ASP.NET? Jeśli tak, możesz opublikować swój kod HTML? – Rocklan

+0

Jego WinForm C#. –

Odpowiedz

6

Znalazłem odpowiedź, jak powiązać datatable z reportviewerem, Będę udostępniony tutaj może być przydatny dla innych.

  1. Do utworzenia clsTables klasa, Report1.rdlc plik, reportViewer1.
  2. Następnie kliknij w prawym górnym rogu reportViewer1 ustaw przełącz zgłosić do Test.Report1.rdlc.
  3. Na Report1.rdlc
    • Kliknij New,
    • Dodaj nazwę zestawu danych: dsBody Źródło danych: test Dostępne zestawu danych: clsTables
    • Kliknij Ok
    • Kliknij prawym przyciskiem myszy na Report1.rdlc wybierz Wstaw tabelę, przeciągnij element dsBody (Column0, Colum1, Column2) do Report1.rdlc table.
Namespace Test{ 
    public class clsTables { 
     // constructor 
     public clsTables(string col0, string col1, string col2) { 
      this.Column0= col0; 
      this.Column1= col1; 
      this.Column2= col2; 
     } 

     // properties 
     public string Column0{ get; set; } 
     public string Column1{ get; set; } 
     public string Column2{ get; set; } 
    } 
} 

namespace Test{ 
    public class clsMain{ 
     public void BindToRepprtViewer() {   
      // create dataset 
      DataSet ds = new DataSet("myDataset"); 

      // create datatable 
      DataTable dt = new DataTable("myDatatable"); 

      // add columns 
      dt.Columns.Add("column1", typeof(string)); 
      dt.Columns.Add("column2", typeof(string)); 
      dt.Columns.Add("column3", typeof(string)); 

      // insert data rows 
      dt.Rows.Add("row1-col1", "row1-col2", "row1-col3"); 
      dt.Rows.Add("row2-col1", "row2-col2", "row2-col3"); 

      // add datatable to dataset 
      ds.Tables.Add(dt); 

      // save rows to rowList 
      List<clsTables> rowList = new List<clsTables>(); 
      rowList .Clear(); 
      foreach (DataRow row in dt.Rows) { 
       rList.Add(new clsTables(Convert.ToInt32(row.ItemArray[0]), row.ItemArray[1].ToString(), row.ItemArray[2].ToString())); 
      } 

      // binding rowList to bs 
      BindingSource bs = new BindingSource(); 
      bs.DataSource = rowList; 

      // binding bs to rds 
      ReportDataSource rds = new ReportDataSource(); 
      rds.Name = "dsBody"; 
      rds.Value = bs; 

      // binding rds to report viewer 
      reportViewer1.Reset(); 
      reportViewer1.LocalReport.ReportEmbeddedResource = "Test.Report1.rdlc"; 
      reportViewer1.LocalReport.DataSources.Clear(); 
      reportViewer1.LocalReport.DataSources.Add(rds); 
      reportViewer1.RefreshReport(); 
     } 
    } 
} 
+0

Kilka błędów i trochę zagmatwanych, ale pomogło mi :) –

0

Jedyne rzeczy, które mogę zrobić inaczej to zrobić a:

reportViewer1.LocalReport.DataSources.Clear(); 

przed ustawieniem źródła danych, a robię:

reportViewer1.LocalReport.Refresh(); 

zamiast dzwonić RefreshReport() na kontrolerze reportviewer.

Nie jestem pewien, co właściwie robi ReportEmbeddedResource, może spróbuję się tego pozbyć.

+0

Dziękuję. Próbowałem, nadal nie działa. inne pomysły? –

+0

Hmm, wygląda na to, że możesz załadować plik RDLC niepoprawnie. Czy sam raport pojawia się na ekranie (np. Tylko nagłówek) czy jest całkowicie pusty? – Rocklan

+0

tylko nagłówek jest widoczny, tabela danych nie pojawia się wydrukowana w raporcie. –

0

prostu miałem ten sam problem, a żadna z odpowiedzi nie znalazłem z Googling nie zrobił nic dla mnie. Wreszcie, mam to działa. Oto kroki, które podjąłem:

  1. Dodaj nowy zestaw danych do swojego projektu (np. MyDataSet).
  2. Dodaj nową tabelę danych do tego zestawu danych (MyDataTable).
  3. Dodaj kolumny i ustaw ich typy.
  4. Dodaj nowy raport do swojego projektu (Report1.rdlc).
  5. Dodaj tabelę do raportu i dodaj kolumny z MyDataSet.
  6. Dodaj nowy obiekt ReportViewer do swojego formularza (reportViewer).
  7. Kliknij strzałkę w prawym górnym rogu i wybierz opcję Report1.rdlc. Spowoduje to automatyczne dodanie do formularza formularza DataSet i źródła BindingSource.
  8. Wykonaj następujące czynności w przypadku obciążenia forma (lub gdziekolwiek sens):
MyDataSetBindingSource.DataSource = GetDataTable(); 
reportViewer.RefreshReport(); 

Upewnij nazwy kolumna w DataTable mecze te, które określone w MyDataTable.