开发者论坛

 找回密码
 注册 (请使用非IE浏览器)
查看: 5998|回复: 0

[原创]Devexpress XtraReports 系列 5 创建交叉报表

[复制链接]

0

精华

935

贡献

265

赞扬

帖子
4122
软币
9958
在线时间
366 小时
注册时间
2013-7-21
发表于 2013-8-30 09:46:49 | 显示全部楼层 |阅读模式
本帖最后由 lhmlyx2723356 于 2013-8-30 09:49 编辑

昨天我们已经介绍了如何创建多栏报表,详见:[原创]Devexpress XtraReports 系列 4 创建多栏报表
今天我们继续我们的XtraReports系列。Demo和数据库文件最后会附上。
今天的主题是:创建交叉报表

什么是交叉报表呢?

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

依照惯例,我们先来看看我们最后实现的效果,如图:
案例场景:某公司可能有产品1-12,分别属于产品类别1-3,现在要统计这些产品都被客户订购了多少数量。
QQ截图20130829131215.png

开始讲解。

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

第二步:创建一个Devexpress XtraReport报表文件。如图:
报表布局步骤如下:(不知道为什么我的设计器是中文的,英文的朋友找到相对应的就行了)
a,新建报表头:即是上图中的ReportHeader,在报表空白区右键点击

b,在工具箱拖入一个XRPivotGrid控件,用来承载交叉报表所需数据源。
选中XRPivotGrid控件,然后按照下图设置属性
QQ图片20130829131910.jpg

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

c,那如何让数据以交叉形式显示呢?
我们还需要设置一个属性,如图:
QQ截图20130829134655.png

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

第四步,一切准备就绪,接下来就来处理方法事件了。
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();
}
到此,我们就把一个多栏报表完成了。。
送屌丝福利。。哈哈
5fdf8db1cb134954bb97309a574e9258d0094a47.jpg

别忘了点赞呀。。。嘿嘿。。您的赞是我最大的动力。。。 QQ截图20130829172217.png

希望对大家有帮助。。。最后附上源码以及数据库备份文件
http://yunpan.cn/QXeykYVDYnKyP  访问密码 b402


评分

参与人数 9贡献 +5 赞扬 +9 收起 理由
OOOONO + 1 感谢分享
qiongwen + 1 Thanks
DevilHero + 1 很给力
dsir + 1 赞一个
星期七 + 1 Thanks

查看全部评分

回复

使用道具 举报

Archiver|手机版|小黑屋|开发者网 ( 苏ICP备08004430号-2 )
版权所有:南京韵文教育信息咨询有限公司

GMT+8, 2024-11-24 12:35

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表