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


    昨天我们已经介绍了如何创建多栏报表,详见:[原创]Devexpress XtraReports 系列 4 创建多栏报表

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

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

    什么是交叉报表呢?

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

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

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

    QQ截图20130829131215

    开始讲解。


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

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

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

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

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

    QQ图片20130829131910

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

    QQ截图20130829132217

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

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

    QQ截图20130829134655

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

    QQ截图20130829134821

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

    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();
    }

    到此,我们就把一个交叉报表完成了。。
    希望对大家有帮助。。。最后附上源码以及数据库备份文件

    http://yunpan.cn/QXeykYVDYnKyP  访问密码 b402

  • 相关阅读:
    (分享)视频压缩Free Video Compressor 汉化版/中文版【全网唯一】
    (分享)根据IP获取地理位置(百度API)
    易语言5.6 精简破解版[Ctoo]
    性能测试---流程篇
    性能测试--系统资源配置篇
    结合sqlmap进行sql注入过程
    MySQL使用记录
    Oracle创表操作记录
    Oracle常用函数记录
    Oracle使用记录
  • 原文地址:https://www.cnblogs.com/lhmlyx2723356/p/3292820.html
Copyright © 2020-2023  润新知