如何绑定到数据表运行的ReportViewer(How to bind datatable to r

2019-08-19 05:00发布

我希望做一个绑定的数据表与下面的代码的ReportViewer。 我没有看到的结果出现在的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();

Answer 1:

我找到了答案如何绑定到数据表的ReportViewer,我将在这里共享可能是有用的人。

  1. 加入形成clsTables类 ,Report1.rdlc文件 ,reportViewer1。
  2. 然后点击reportViewer1的右上角,设置选择 Test.Report1.rdlc 报告
  3. 在Report1.rdlc
    • 单击新建
    • 添加数据集名称 :dsBody 数据来源 :测试可用的数据集 :clsTables
    • 单击确定
    • 右键单击Report1.rdlc选择插入表格 ,请将dsBody元素(Column0,Colum1,列2)Report1.rdlc表
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();
        }
    }
}


Answer 2:

我做不同的是我做的唯一的东西:

reportViewer1.LocalReport.DataSources.Clear();

设置数据源之前,我做了:

reportViewer1.LocalReport.Refresh(); 

而不是在ReportViewer控件调用RefreshReport()。

我不知道什么是正确ReportEmbeddedResource不,也许尝试摆脱这一点。



Answer 3:

我只是有这个同样的问题,我没有从谷歌搜索找到的答案做了什么我。 最后,我得到了它的工作。 下面是我遵循的步骤:

  1. 添加一个新的DataSet到您的项目(即MyDataSet )。
  2. 添加一个新的DataTable这个数据集( MyDataTable )。
  3. 添加您的栏目,并设置其类型。
  4. 一份新的报告添加到项目( Report1.rdlc )。
  5. 表添加到报表,并从MyDataSet添加列。
  6. 一个新的ReportViewer对象添加到您的窗体( reportViewer )。
  7. 点击右上方的箭头,然后选择Report1.rdlc 。 这将自动添加数据集和BindingSource的表单。
  8. 执行以下步骤,你的窗体加载事件(或者其它任何有意义的):
MyDataSetBindingSource.DataSource = GetDataTable();
reportViewer.RefreshReport();

请确保您的数据表中的列名你MyDataTable中定义的匹配。



文章来源: How to bind datatable to reportviewer runtime