I found the answer how to bind datatable to reportviewer, I will share here, it can be useful for others.
- Add the clsTables class to the form , the file Report1.rdlc , reportViewer1 .
- reportViewer1, Test.Report1.rdlc.
- Report1.rdlc
- ,
- : dsBody : : clsTables
- Report1.rdlc, , dsBody (Column0, Colum1, Column2) Report1.rdlc.
Namespace Test{
public class clsTables {
public clsTables(string col0, string col1, string col2) {
this.Column0= col0;
this.Column1= col1;
this.Column2= col2;
}
public string Column0{ get; set; }
public string Column1{ get; set; }
public string Column2{ get; set; }
}
}
namespace Test{
public class clsMain{
public void BindToRepprtViewer() {
DataSet ds = new DataSet("myDataset");
DataTable dt = new DataTable("myDatatable");
dt.Columns.Add("column1", typeof(string));
dt.Columns.Add("column2", typeof(string));
dt.Columns.Add("column3", typeof(string));
dt.Rows.Add("row1-col1", "row1-col2", "row1-col3");
dt.Rows.Add("row2-col1", "row2-col2", "row2-col3");
ds.Tables.Add(dt);
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()));
}
BindingSource bs = new BindingSource();
bs.DataSource = rowList;
ReportDataSource rds = new ReportDataSource();
rds.Name = "dsBody";
rds.Value = bs;
reportViewer1.Reset();
reportViewer1.LocalReport.ReportEmbeddedResource = "Test.Report1.rdlc";
reportViewer1.LocalReport.DataSources.Clear();
reportViewer1.LocalReport.DataSources.Add(rds);
reportViewer1.RefreshReport();
}
}
}