报表数据来自数据库
A-1.创建DataSet。选择“服务器资源管理器”下的数据连接,选择数据库的某个表,拖到xsd的面板中。
A-2.添加报表。“报表数据”,“新建数据集...”。“对象”,选择刚才生成的DataSet。可以看到数据集中出现刚才的表格。最上面填充数据集名称,这个名称下面会用到,所以尽量不随意命名。下面数据绑定的过程中可能会用。
A-3.添加完报表数据后,继续编辑报表。从工具箱中拖出“表”、“文本框”..等控件来设计报表的前台。
A-4.绑定数据。在输入框中右键,“表达式”,在=后面编写输入框要表现的信息。常用:="工程师:" & First(Field!Designer.Value, "Employees")。其中'&'连接两段独立的信息,"First"表示第一条数据,"Field!"说明哪个字段名称,"Employees"是表名。如果信息是一段固定的文字,可直接通过输入框输入。(此处没有理解表的组有什么作用)
A-5.完成以上步骤后,设计前台WinForm。新建一个WinForm,拖入控件"ReportViewer"。
A-6.进入后台,编写绑定数据函数。
DsDataBaseTableAdapters.AAA_0228TableAdapter AAA_0228TableAdapter = new DsDataBaseTableAdapters.AAA_0228TableAdapter(); DsDataBase ds = new DsDataBase(); AAA_0228TableAdapter.ClearBeforeFill = true; AAA_0228TableAdapter.Fill(ds.AAA_0228); ReportDataSource dataSource1 = new ReportDataSource("DataSet1", ds.Tables["AAA_0228"]); reportViewer1.LocalReport.DataSources.Add(dataSource1); reportViewer1.LocalReport.ReportEmbeddedResource = "ReportPractise.ReportDataBase.ReportDataBase.rdlc";
报表数据来自本地XML
B-1.创建DataSet。"工具箱","DataTable“,新增和编辑表的列。
B-2.A-1/A-2/A-3/A-4
B-3.创建一个XML文件,将其属性改为“复制到输出目录--始终复制”。并在xml中编写内容,内容与创建的DataSet的表结构一样。数据一一对应。最终会将xml的数据读取到DataSet的表中,通过前台呈现出来。
B-4.A-5/A-6。绑定数据的函数如下。
using (var ds = new DataSet()) { ds.ReadXml("ReportXML\\BasicInfo.xml"); ReportDataSource dataSource1 = new ReportDataSource("DataSet1", ds.Tables["BasicInfo"]); reportViewer1.LocalReport.DataSources.Add(dataSource1); reportViewer1.LocalReport.ReportEmbeddedResource = "ReportPractise.ReportXML.ReportXML.rdlc"; }
数据集中有多个表格,也就是说报表数据来源自多个表格。
1.创建完DataSet后,在DataSet中创建多个DataTable。可以是数据库也可以是自定义。以自定义为例。
2.创建报表。在报表的报表数据中添加数据集,多次添加,将最终需要获取表现出来的DataTable全部添加到数据集中。
3.编辑完报表之后,创建XML数据。同样需要构造所有的表格数据。
4.界面绑定数据的函数如下:
using (var ds = new DataSet()) { ds.ReadXml("ReportMultiTable\\TestResult.xml"); ReportDataSource dataSource1 = new ReportDataSource("dsMain", ds.Tables["Main"]); ReportDataSource dataSource2 = new ReportDataSource("dsDetail", ds.Tables["Detail"]); reportViewer1.LocalReport.DataSources.Add(dataSource1); reportViewer1.LocalReport.DataSources.Add(dataSource2); reportViewer1.LocalReport.ReportEmbeddedResource = "ReportPractise.ReportMultiTable.ReportMultiTable.rdlc"; }
遗留问题:编辑rdlc报表的过程中,“分组”是什么意思?reportViewer可以设置绑定报表,为什么有的时候绑定完了之后会自动生成Adapter.fill,而有时候又不行呢?同样的数据,同样的操作,在两个解决方案中打开,一个会自动在Load里面生成Fill(),同时自动添加DataSet,Adapter,BindingData,另一个只生成了BindingData......