5

我想用下面的代码将数据表绑定到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();
4

3 回答 3

7

我找到了如何将数据表绑定到reportviewer的答案,我将在这里分享可能对其他人有用。

  1. 添加到表单clsTables 类Report1.rdlc 文件reportViewer1
  2. 然后点击reportViewer1的右上角,设置选择报告Test.Report1.rdlc
  3. 在 Report1.rdlc 上
    • 点击新建
    • 添加数据集名称:dsBody 数据源:测试 可用数据集:clsTables
    • 点击确定
    • 右键单击 Report1.rdlc 选择Insert Table,将 dsBody 元素( Column0, Colum1, Column2 )拖到 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();
        }
    }
}
于 2013-04-05T10:24:38.703 回答
0

我做的唯一不同的事情是我做了:

reportViewer1.LocalReport.DataSources.Clear();

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

reportViewer1.LocalReport.Refresh(); 

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

我不确定ReportEmbeddedResource正确地做了什么,也许也尝试摆脱它。

于 2013-04-03T05:17:27.733 回答
0

我只是遇到了同样的问题,我从谷歌搜索中找到的答案都没有为我做任何事情。最后,我让它工作了。这是我遵循的步骤:

  1. 将一个新的 DataSet 添加到您的项目中(即MyDataSet)。
  2. 向此 DataSet ( ) 添加一个新的 DataTable MyDataTable
  3. 添加您的列,并设置它们的类型。
  4. 将新报告添加到您的项目 ( Report1.rdlc)。
  5. 将表添加到报表并添加来自 MyDataSet 的列。
  6. 将一个新的 ReportViewer 对象添加到您的表单 ( reportViewer)。
  7. 单击右上角的箭头并选择Report1.rdlc。这将自动将 DataSet 和 BindingSource 添加到您的表单中。
  8. 在表单加载事件(或任何有意义的地方)中执行以下操作:
MyDataSetBindingSource.DataSource = GetDataTable();
reportViewer.RefreshReport();

确保 DataTable 中的列名与您在 MyDataTable 中定义的列名匹配。

于 2015-12-08T22:20:18.577 回答