How to bind datatable to reportviewer runtime

20,244

I found the answer how to bind datatable to reportviewer, I will shared here may be useful for others.

  1. Add to form clsTables class, Report1.rdlc file, reportViewer1.
  2. Then Click on the upper right corner of the reportViewer1, set choose report to Test.Report1.rdlc.
  3. On Report1.rdlc
    • Click New,
    • Add dataset name: dsBody Data source: Test Available dataset: clsTables
    • Click Ok
    • Right click on Report1.rdlc select 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();
        }
    }
}
Share:
20,244
new bie
Author by

new bie

I love to learn and share various things about the hardware and software

Updated on December 09, 2020

Comments

  • new bie
    new bie over 3 years

    I want to do a bind datatable to reportviewer with the code below. I don't see the results appear in the reportviewer, what the lack of script below?

    // 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();
    
  • Rocklan
    Rocklan about 11 years
    Hmm, it looks like you might be loading in the RDLC file incorrectly. Does the report itself appear on your screen (eg just the header) or is it completely empty?
  • new bie
    new bie about 11 years
    only header is visible, the data table doesn't appear printed on the report.
  • T.Coutlakis
    T.Coutlakis over 10 years
    A few bugs, and bit confusing, but it helped me :)