RDLC 简单统计表的实现

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

 

⚪ 追加报表文件

 

设计报表文件

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

 

②追加表格,绑定数据源

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

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

 

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

更新后的DataRecord.cs

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

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

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

 

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

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

追加行Group

追加列Group

整理Table如下

为单元格添加统计表达式

(此处的截图已经设置了字体和边框线)

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

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,如图

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到编译路径下,不然会报找不到文件的错

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

 

四、其他

⚪设置打印时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);

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

 

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

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

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

运行效果如下图:

 

⚪实现换页的两种方式

利用Table的换页

利用四角形的换页

 

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

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页