c# 报表练习笔记

报表数据来自数据库

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......

posted @ 2013-03-11 14:50  脸谱匠  阅读(2083)  评论(0编辑  收藏  举报