2013-04-03 47 views
5

我想要綁定數據表reportviewer下面的代碼。我看不到結果出現在報告查看器中,下面缺少哪些腳本?如何將datatable綁定到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

您已將此標記爲winforms,但使用c#-4.0 - 這是一個ASP.NET應用程序嗎?如果是的話,你可以發佈你的HTML? – Rocklan

+0

它的winform C#。 –

回答

6

我發現答案如何將datatable綁定到reportviewer, 我會在這裏分享可能對他人有用。

  1. 添加形成clsTables類Report1.rdlc文件reportViewer1
  2. 然後點擊reportViewer1的右上角,設置選擇的報告Test.Report1.rdlc
  3. 在Report1.rdlc
    • 點擊
    • 添加集名:dsBody 數據源:測試 可用數據集:clsTables
    • 點擊
    • 右鍵單擊Report1.rdlc選擇Insert Table,drag dsBody element(Column0,Colum1,Column2)to 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

一些錯誤,有點混亂,但它幫助我:) –

0

,我有什麼不同,唯一的事情是我做的一個:

reportViewer1.LocalReport.DataSources.Clear(); 

設置數據源之前,我做了:

reportViewer1.LocalReport.Refresh(); 

而不是調用RefreshReport的()在reportviewer控件上。

我不確定什麼ReportEmbeddedResource正確地做,也許嘗試擺脫這一點。

+0

謝謝。我試過了,仍然不起作用。其他想法? –

+0

嗯,看起來你可能會錯誤地加載RDLC文件。報告本身是否出現在屏幕上(例如只是標題)還是完全空白? – Rocklan

+0

只有標題可見,數據表不顯示在報告上。 –

0

我只是有這個同樣的問題,我沒有從谷歌搜索找到的答案做了什麼我。最後,我得到了它的工作。以下是我遵循的步驟:

  1. 向項目中添加一個新的DataSet(即MyDataSet)。
  2. 將新的DataTable添加到此DataSet(MyDataTable)。
  3. 添加你的列,並設置它們的類型。
  4. 向您的項目添加新報告(Report1.rdlc)。
  5. 向報表添加一個表並添加MyDataSet中的列。
  6. 將新的ReportViewer對象添加到您的表單(reportViewer)。
  7. 單擊右上角的箭頭並選擇Report1.rdlc。這會自動將DataSet和BindingSource添加到您的表單中。
  8. 執行以下步驟,您的窗體加載事件(或者其它任何有意義):
MyDataSetBindingSource.DataSource = GetDataTable(); 
reportViewer.RefreshReport(); 

確保您的數據表中的列名你MyDataTable中定義的匹配。

相關問題