博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【转】Devexpress XtraReports 系列 5 创建交叉报表
阅读量:5736 次
发布时间:2019-06-18

本文共 1961 字,大约阅读时间需要 6 分钟。

 

昨天我们已经介绍了如何创建多栏报表,详见:

今天我们继续我们的XtraReports系列。Demo和数据库文件最后会附上。

今天的主题是:创建交叉报表

什么是交叉报表呢?

官方回答:交叉表报表是以交叉表形式呈现信息的报表。 交叉表 (或透视表) 类似于简单的普通数据绑定表格,但是改为在单个表格中呈现多维的分层级的信息,并含有每行和每列的自动排序、计数、合计和累计。

依照惯例,我们先来看看我们最后实现的效果,如图:

案例场景:某公司可能有产品1-12,分别属于产品类别1-3,现在要统计这些产品都被客户订购了多少数量。

开始讲解。

第一步:窗体布局。 
新建一个WinForm窗体,,拉入第三方控件SimpleButton,DocumentViewer,SplitContainerControl,LabelControl,TextEdit,GroupControl,无非就是设置空间Dock属性,还有字体Text属性等,简单布局我就不多阐述了。可以参考我该系列第一篇。

 

第二步:创建一个Devexpress XtraReport报表文件。如图:

报表布局步骤如下:(不知道为什么我的设计器是中文的,英文的朋友找到相对应的就行了) 

a,新建报表头:即是上图中的ReportHeader,在报表空白区右键点击

b,在工具箱拖入一个XRPivotGrid控件,用来承载交叉报表所需数据源。

选中XRPivotGrid控件,然后按照下图设置属性

b,点击下面的设计器,在弹出的列编辑器中,分别修改新增的三列的绑定字段属性,还有显示名称。

c,那如何让数据以交叉形式显示呢?

我们还需要设置一个属性,如图:

第三步,准备数据源,如图:一个产品类别字段category,一个产品名称字段name,一个订购数量字段orderamount。

 

 

 

 

 

 

 

第四步,一切准备就绪,接下来就来处理方法事件了。

a,从数据库中获取绑定数据源

private DataSet BindRpt() 

    DataSet ds = new DataSet(); 
    try 
    { 
        SqlConnection con = new SqlConnection("Data Source=(local);Integrated Security=SSPI;Initial Catalog=ReportDeom"); 
        SqlDataAdapter adapter; 
        con.Open(); 
        SqlCommand cmd = new SqlCommand("SELECT * FROM CrossRptData where category=@name OR @name='' ", con); 
        SqlParameter[] paras = new SqlParameter[]{ 
            new SqlParameter("@name",txtName.Text.Trim()) 
        }; 
        cmd.Parameters.AddRange(paras); 
        adapter = new SqlDataAdapter(cmd); 
        adapter.Fill(ds, "CrossTableRpt"); ; 
        con.Close(); 
    } 
    catch (Exception ex) 
    { 
        throw ex; 
    } 
    return ds; 
}

 

b,修改报表文件默认构造函数,让其可以接收数据源并绑定

public CrossTableRpt(DataSet ds) 

    InitializeComponent(); 
    this.xrPivotGrid1.DataSource = ds; 
    //this.xrPivotGrid1.OptionsView.ShowColumnHeaders = false;//不显示列头 
    //this.xrPivotGrid1.OptionsView.ShowDataHeaders = false;//不显示数据头 

 

c,处理显示报表按钮事件。把数据源传递给报表,并展示出来。

private void btnShowReport_Click(object sender, EventArgs e) 

    DataSet ds = BindRpt(); 
    CrossTableRpt Rpt = new CrossTableRpt(ds); 
    this.documentViewer1.DocumentSource = Rpt; 
    Rpt.CreateDocument(); 
}

到此,我们就把一个交叉报表完成了。。 

希望对大家有帮助。。。最后附上源码以及数据库备份文件

  访问密码 b402

转载于:https://www.cnblogs.com/cmf1/p/5149306.html

你可能感兴趣的文章
灵活运用 SQL SERVER FOR XML PATH
查看>>
es 加磁盘扩容
查看>>
linux 参数内核
查看>>
使用Azcopy在Azure上进行HBase的冷热备份还原
查看>>
计组_定点数一位乘_布斯公式
查看>>
linux下使用过的命令总结(未整理完)
查看>>
ES6的一些文章
查看>>
LeetCode 198, 213 House Robber
查看>>
New Year Permutation(Floyd+并查集)
查看>>
Qt编写输入法V2018超级终结版
查看>>
<context:component-scan>详解
查看>>
DS博客作业07--查找
查看>>
[JOI2017] サッカー (Soccer)
查看>>
Git 方法
查看>>
[Python] numpy.nonzero
查看>>
2016-11-29
查看>>
C#反射的坑
查看>>
css3 box-shadow阴影(外阴影与外发光)讲解
查看>>
时间助理 时之助
查看>>
nginx快速安装
查看>>