How to bind datatable to reportviewer runtime

前端 未结 3 1814
天涯浪人
天涯浪人 2020-12-06 19:53

I want to do a bind datatable to reportviewer with the code below. I don\'t see the results appear in the reportviewer, wh

相关标签:
3条回答
  • 2020-12-06 20:07

    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();
            }
        }
    }
    
    0 讨论(0)
  • 2020-12-06 20:10

    I just had this same problem, and none of the answers I found from Googling did anything for me. Finally, I got it working. Here's the steps I followed:

    1. Add a new DataSet to your project (i.e. MyDataSet).
    2. Add a new DataTable to this DataSet (MyDataTable).
    3. Add your columns, and set their types.
    4. Add a new Report to your project (Report1.rdlc).
    5. Add a table to the report and add the columns from MyDataSet.
    6. Add a new ReportViewer object to your form (reportViewer).
    7. Click the arrow at the top right and choose Report1.rdlc. This will automatically add the DataSet and a BindingSource to your form.
    8. Do the following in your form load event (or where ever makes sense):
    MyDataSetBindingSource.DataSource = GetDataTable();
    reportViewer.RefreshReport();
    

    Make sure the column names in your DataTable matches the ones you defined in MyDataTable.

    0 讨论(0)
  • 2020-12-06 20:14

    The only things that I do differently is I do a:

    reportViewer1.LocalReport.DataSources.Clear();
    

    before setting the data source, and I do a:

    reportViewer1.LocalReport.Refresh(); 
    

    instead of calling RefreshReport() on the reportviewer control.

    I'm not sure what the ReportEmbeddedResource properly does, maybe try getting rid of that too.

    0 讨论(0)
提交回复
热议问题