我想使用以下代码对 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();
答案 0 :(得分:7)
我找到了如何将数据表绑定到reportviewer的答案, 我在这里分享可能对其他人有用。
- 添加到表单 clsTables类, Report1.rdlc文件, reportViewer1 。
- 然后点击 reportViewer1 的右上角,将选择报告设置为 Test.Report1.rdlc 。
- 在Report1.rdlc上
醇>
- 点击新建,
- 添加数据集名称:dsBody 数据来源:测试 可用数据集:clsTables
- 点击确定
- 右键单击Report1.rdlc,选择插入表,将dsBody元素( Column0,Colum1,Column2 )拖到 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();
}
}
}
答案 1 :(得分:0)
我做的唯一不同的事情是我做了:
reportViewer1.LocalReport.DataSources.Clear();
在设置数据源之前,我执行了:
reportViewer1.LocalReport.Refresh();
而不是在reportviewer控件上调用RefreshReport()。
我不确定 ReportEmbeddedResource 正确做了什么,也许也试着摆脱它。
答案 2 :(得分:0)
我遇到了同样的问题,我从谷歌搜索中找到的答案都没有为我做任何事情。最后,我得到了它的工作。这是我遵循的步骤:
MyDataSet
)。MyDataTable
)。Report1.rdlc
)。reportViewer
)。Report1.rdlc
。这将自动将DataSet和BindingSource添加到表单中。MyDataSetBindingSource.DataSource = GetDataTable();
reportViewer.RefreshReport();
确保DataTable中的列名与您在MyDataTable中定义的列名相匹配。