RDLC 简单统计表的实现

时间:2024-04-02 14:13:33

RDLC学习的记录和分享。

更多详细,可参照官网:

https://docs.microsoft.com/zh-cn/sql/reporting-services/report-design/planning-a-report-report-builder?view=sql-server-2017

 

一、运行环境

   开发工具:vs2015(日语版的,但汉字大家应该都能看懂)

二、开发步骤

 第一步,新建winform窗体;

 第二步,新建类DataRecord.cs,作为RDLC文件的数据源。

        此步骤后一定要编译下程序,不然后面生成数据源时找不到目标文件。

        也可使用数据集*.xsd作为数据源,这时候就不用编译程序了。

 第三步,利用向导添加Report1.rdlc报表文件,设计此报表文件;

 第四步,在窗体上添加ReportViewer控件作为呈现报表的容器

 第五步,在窗体上添加按钮,点击此按钮时更新报表数据。

、详细步骤(大量截图)

⚪ 追加数据源类DataRecord.cs

RDLC 简单统计表的实现

 

⚪ 追加报表文件

RDLC 简单统计表的实现

 

设计报表文件

①追加四角形,类似于Panel的功能,如果多控件需要调整位置的话,加四角形会省力很多。

RDLC 简单统计表的实现

 

②追加表格,绑定数据源

RDLC 简单统计表的实现

RDLC 简单统计表的实现

RDLC 简单统计表的实现

RDLC 简单统计表的实现

此时在Properties\DataSources目录下生成了DataRecord.datasource文件。

名前设置的名字,类似于Report1.rdlc文件内部的变量名,在Form层最终绑定数据的时候会用到。

 

③这个时候若更改了数据源DataRecord.cs,则需要手动更新Report1.rdlc绑定的字段。方法如下:

更新后的DataRecord.cs

RDLC 简单统计表的实现

全局检索DataRecord,在检索结果里面选择Report1.rdlc,双击打开对应的xml文件。

RDLC 简单统计表的实现

RDLC 简单统计表的实现

xml文件如下,需要将变动的字段更新,保存即可。

(DataSets的内容是此RDLC绑定的所有数据源,DataSet是某一数据源)

RDLC 简单统计表的实现

RDLC 简单统计表的实现

 

④若单纯的显示数据的话,则选择字段进行绑定就OK。红框选中部分表示重复显示。

RDLC 简单统计表的实现

⑤若需要对数据源进行Group统计,则删除④中红框选中的行,新追加普通行。

追加行Group

RDLC 简单统计表的实现

RDLC 简单统计表的实现

RDLC 简单统计表的实现

追加列Group

RDLC 简单统计表的实现

RDLC 简单统计表的实现

RDLC 简单统计表的实现

整理Table如下

RDLC 简单统计表的实现

RDLC 简单统计表的实现

为单元格添加统计表达式

RDLC 简单统计表的实现

RDLC 简单统计表的实现

RDLC 简单统计表的实现(此处的截图已经设置了字体和边框线)

上面框选部分的表达式均相同。

Region和ClassNode交叉处单元格 Group By Region和ClassNo

行合计 只Group By Region

列合计 只Group By ClassNo

行合计列合计交叉处单元格没有Croup条件

累计的表达式为 =RunningValue(Fields!Name.Value, Count, Nothing)

ClassNo若要显示在下面,则删除第一行时,只删除行,不要删除Group条件

 

⑥添加ReportViewer和Button,绑定数据

添加ReportViewer后要绑定一下Report,如图

RDLC 简单统计表的实现

Button的Click事件:

        private void button1_Click(object sender, EventArgs e)
        {
            List<DataRecord> dataSource = new List<DataRecord>();
            Random random = new Random();
            DataRecord temp;

            //Class Index
            for (int classIndex = 1; classIndex <= 3; classIndex++)
            {
                //Student Index
                for (int studentIndex = 1; studentIndex <= 10; studentIndex++)
                {
                    temp = new DataRecord();
                    temp.ClassNo = classIndex + "班";
                    temp.Name = "Name" + studentIndex;
                    temp.Score = random.Next(0, 100);
                    temp.Region = GetRegion(temp.Score);
                    dataSource.Add(temp);
                }

            }

 

            this.reportViewer1.LocalReport.DataSources.Clear();
            this.reportViewer1.LocalReport.ReportEmbeddedResource = "WindowsFormsTesst.Report1.rdlc";
            this.reportViewer1.LocalReport.DataSources.Add(new Microsoft.Reporting.WinForms.ReportDataSource("DataRecord", dataSource));
            this.reportViewer1.RefreshReport();
        }

        private string GetRegion(int score)
        {
            string region = string.Empty;

            if (0 <= score && score <= 10)
                region = " 0 ~  10";
            else if (10 < score && score <= 20)
                region = "11 ~  20";
            else if (20 < score && score <= 30)
                region = "21 ~  30";
            else if (30 < score && score <= 40)
                region = "31 ~  40";
            else if (40 < score && score <= 50)
                region = "41 ~  50";
            else if (50 < score && score <= 60)
                region = "51 ~  60";
            else if (60 < score && score <= 70)
                region = "61 ~  70";
            else if (70 < score && score <= 80)
                region = "71 ~  80";
            else if (80 < score && score <= 90)
                region = "81 ~  90";
            else if (90 < score && score <= 100)
                region = "91 ~  100";

            return region;

 

        }

⑦运行之前,设置一下Report1.rdlc的属性,Copy到编译路径下,不然会报找不到文件的错

RDLC 简单统计表的实现

最终运行效果如下(边框线粗的地方,可能时边框线设置重复,也可能是ReportViewer本身显示的问题)

RDLC 简单统计表的实现

 

四、其他

⚪设置打印时Page设定信息,代码如下

           PageSettings newPage = new PageSettings();

 

            newPage.Margins = new System.Drawing.Printing.Margins(40, 40, 20, 20);
            newPage.PaperSize = new PaperSize("A3 297x420mm", 1169, 1654);
            newPage.PaperSize.RawKind = 8;
            newPage.Landscape = true;

 

            this.reportViewer1.SetPageSettings(newPage);

也可通过菜单栏设置,如下图:

RDLC 简单统计表的实现

 

⚪每一个单元格其实是一个TextBox,并且有对应的名字。

可以通过取得TextBox的值来取得同一行其他字段的值。

RDLC 简单统计表的实现

RDLC 简单统计表的实现

Textbox2的表达式:=ReportItems!Region.Value

运行效果如下图:

RDLC 简单统计表的实现

 

⚪实现换页的两种方式

利用Table的换页

RDLC 简单统计表的实现

RDLC 简单统计表的实现

利用四角形的换页

RDLC 简单统计表的实现

 

⚪多个数据源的追加(选中RDLC文件)

RDLC 简单统计表的实现

RDLC 简单统计表的实现

RDLC 简单统计表的实现