1. XRTableCell常见属性

  XRTableCell xrTableCell = new XRTableCell();

  A. 字体及字体大小

xrTableCell.Font = new System.Drawing.Font("Arial", FontSize);

  B. 内容是否可以换行

  xrTableCell.WordWrap = False;

C. 文本对齐方式

  xrTableCell.TextAlignment=DevExpress.XtraPrinting.TextAlignment.MiddleLeft;

D. 边框是否显示及边框宽度

xrTableCell.Borders = DevExpress.XtraPrinting.BorderSide.All;

xrTableCell.BorderWidth = 0.5F;

E. 宽度和高度

  xrTableCell.WidthF = 30;

  xrTableCell.HeightF = 30;

  F. XRTableCell文本前景色

xrTableCell.ForeColor=Color.Red;

G. XRTableCell文本内容左右间隔;

  DevExpress.XtraPrinting.PaddingInfo padRight= new DevExpress.XtraPrinting.PaddingInfo();
    padRight.Right = 4;

XRTableCell xrTableCell = new XRTableCell();
    xrTableCell.Padding = padRight;

2. xrTable合并单元格(主要针对旧版本)

在新做的一个页面要用到xrTable合并单元格。我先在Design界面加了一个GroupHeader,随后又在GroupHeader中放了一个XRPanel,最后在XRPanel放入由xrTable嵌套的实现合并XRTableCell的功能,最后导致每一页在切换到下一页时输入很奇怪的一条线,最后查了两三天才发现这个问题。后来经过确认其实不需要加XRPanel的,直接放入嵌套的xrTable就可以了,深刻的教训,值得深思!

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using DevExpress.XtraReports.UI;
using System.Drawing.Printing;
using System.Linq.Expressions; namespace DevExpressConsole
{
public partial class TrendAndReport : DevExpress.XtraReports.UI.XtraReport
{
public TrendAndReport()
{
InitializeComponent();
PrintDocument();
} private void PrintDocument()
{
float TotalWidth = this.PageWidth - this.Margins.Left - this.Margins.Right;
float CellHeight = ;
float CondtWidth = ; for (int i = ; i <= ; i++)
{
XRTable TableContainer = new XRTable();
TableContainer.CanGrow = true;
TableContainer.BeginInit();
for(int j=;j<;j++)
{
XRTableRow TCRow = new XRTableRow();
TCRow.CanGrow = true; XRTableCell OrderNo = new XRTableCell();
OrderNo.CanGrow = true;
OrderNo.WidthF = TotalWidth - CondtWidth - ;
OrderNo.HeightF = CellHeight;
OrderNo.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
OrderNo.ProcessDuplicates = DevExpress.XtraReports.UI.ValueSuppressType.Suppress;
OrderNo.Text = j + + "";
OrderNo.WordWrap = true;
TCRow.Cells.Add(OrderNo); XRTableCell Happy = new XRTableCell();
Happy.CanGrow = true;
Happy.WidthF = ;
Happy.HeightF = CellHeight;
Happy.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
Happy.Text = "I am very happy with this! ";
Happy.WordWrap = true;
TCRow.Cells.Add(Happy); XRTableCell HW = new XRTableCell();
HW.CanGrow = true;
HW.WidthF = ;
HW.HeightF = CellHeight;
HW.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
HW.Text = "Hello World! ";
HW.WordWrap = true;
TCRow.Cells.Add(HW); TableContainer.Rows.Add(TCRow);
}
TableContainer.KeepTogether = true;
TableContainer.AdjustSize();
TableContainer.EndInit(); XRTable xrTab = new XRTable();
xrTab.CanGrow = true;
xrTab.BeginInit();
xrTab.LocationF = new PointF(, + TableContainer.HeightF * i); XRTableRow row = new XRTableRow();
row.CanGrow = true; XRTableCell cell = new XRTableCell();
cell.CanGrow = true;
cell.Borders = DevExpress.XtraPrinting.BorderSide.All;
cell.Controls.Add(TableContainer);
cell.WidthF = TableContainer.WidthF;
row.Cells.Add(cell); XRTableCell CONT = new XRTableCell();
CONT.CanGrow = true;
CONT.Text = "Cont'd";
CONT.WidthF = CondtWidth;
CONT.HeightF = TableContainer.HeightF;
CONT.Angle = ;
CONT.Borders = DevExpress.XtraPrinting.BorderSide.All;
CONT.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
row.Cells.Add(CONT); GroupHeader1.Controls.Add(xrTab);
xrTab.WidthF = TotalWidth;
xrTab.HeightF = TableContainer.HeightF;
xrTab.Rows.Add(row);
xrTab.AdjustSize();
xrTab.EndInit();
}
}
}
}

3. xrTable分页

其实xrTable只要为每个表设置了LocationF属性,就会被自动挤到下一页,为了需要,还是做了一个例子进行确认:

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using DevExpress.XtraReports.UI;
using System.Drawing.Printing;
using System.Linq.Expressions; namespace DevExpressConsole
{
public partial class TrendAndReport : DevExpress.XtraReports.UI.XtraReport
{
int k = ;
public TrendAndReport()
{
InitializeComponent();
while (k < )
{
PrintDocument();
}
} public void PrintDocument()
{
int EveryTabeNum = ;
int TabPortaitSpan = ; XRTable xt = new XRTable();
xt.CanGrow = true;
xt.Borders = DevExpress.XtraPrinting.BorderSide.All;
xt.BorderWidth = 0.5f;
xt.BeginInit();
XRTableRow xrow_header = new XRTableRow();
XRTableCell xc_header = new XRTableCell();
xc_header.Text = "DevExpress Page Break Usage -- Table" + (k + ).ToString();
xc_header.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
xrow_header.Cells.Add(xc_header);
xt.Rows.Add(xrow_header);
for (int i = ; i < ; i++)
{
XRTableRow xrow = new XRTableRow();
xrow.CanGrow = true;
xrow.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
for (int j = ; j < ; j++)
{
XRTableCell xc = new XRTableCell();
xc.HeightF = 25f;
if (i % == )
{
if (i / >= )
{
xc.Text = "ABCD";
}
else
{
xc.Text = DateTime.Now.ToShortDateString();
}
}
else
{
xc.CanGrow = true;
xc.Text = DateTime.Now.ToLocalTime().ToShortTimeString();
}
xrow.Cells.Add(xc);
}
if (i % == )
{
xrow.BackColor = Color.LightGray;
}
xt.Rows.Add(xrow);
}
xt.AdjustSize();
xt.EndInit();
xt.Font = new System.Drawing.Font(Font.FontFamily, 8f, FontStyle.Regular);
//Setting the table position.
xt.LocationF = new PointF(, TabPortaitSpan * k + xt.HeightF * k);
Detail.Controls.Add(xt);
xt.WidthF = this.PageWidth - this.Margins.Left - this.Margins.Right-; //Add page break for every EveryTabeNum tables.
if ((k + ) % EveryTabeNum == )
{
XRPageBreak pb = new XRPageBreak();
pb.LocationF = new PointF(, TabPortaitSpan * k + xt.HeightF * (k + ));
Detail.Controls.Add(pb);
}
k++;
}
}
}

4. 动态改变xrTable的元素大小

xrTable元素的大小不是我们想的只要设置宽度和高度后会自动生效,它需要在xrTable.BeginInit()TableContainer.AdjustSize();TableContainer.EndInit();的包裹之内执行,同时设置元素的属性CanGrow/CanShrink为True:

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using DevExpress.XtraReports.UI;
using System.Drawing.Printing;
using System.Linq.Expressions; namespace DevExpressConsole
{
public partial class TrendAndReport : DevExpress.XtraReports.UI.XtraReport
{
int k = ;
public TrendAndReport()
{
InitializeComponent();
PrintDocument();
} public void PrintDocument()
{
int TabPortaitSpan = ; XRTable xt = new XRTable();
xt.CanGrow = true;
xt.Borders = DevExpress.XtraPrinting.BorderSide.All;
xt.BorderWidth = 0.5f;
xt.BeginInit(); for (int i = ; i < ; i++)
{
XRTableRow xrow = new XRTableRow();
xrow.CanGrow = true;
xrow.HeightF = 50f;
xrow.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; for (int j = ; j < ; j++)
{
XRTableCell xc = new XRTableCell();
if (i % == )
{
if (i / >= )
{
xc.Text = "ABCD";
}
else
{
xc.Text = DateTime.Now.ToShortDateString();
}
}
else
{
xc.Text = DateTime.Now.ToLocalTime().ToShortTimeString();
}
xrow.Cells.Add(xc);
}
if (i % == )
{
xrow.BackColor = Color.LightGray;
}
xt.Rows.Add(xrow);
}
xt.AdjustSize();
xt.EndInit();
xt.Font = new System.Drawing.Font(Font.FontFamily, 8f, FontStyle.Regular);
xt.LocationF = new PointF(, TabPortaitSpan * k + xt.HeightF * k);
Detail.Controls.Add(xt);
xt.WidthF = this.PageWidth - this.Margins.Left - this.Margins.Right-;
}
}
}

以下为设置前后的对比图:

设置前:

设置后:

5. 在XRTableCell.AdjustSize();XRTableCell.EndInit();前后设置XRTableCell宽度Width的区别

    在XRTableCell.AdjustSize();XRTableCell.EndInit();执行前设置XRTable的宽度,则XRTableCell的宽度会以当前设置的值为准,不会再发生变化,如下图所示:

在XRTableCell.AdjustSize();XRTableCell.EndInit();执行后设置XRTable的宽度,则XRTableCell的宽度会以当前XRTable的宽度为基准根据内容自动调整宽度,如下所示:

6. 需要注意的几点

 A. XRTable背景色可以通过整行去添加背景色,而不需要一个一个XRTableCell去设置:

 XRTableRow xrTableRow = new XRTableRow();

 xrTableRow.BackColor = Color.LightGray;

B. 设置XRTable的边框及颜色会覆盖xrTableRow和xrTableCell之前的设置,所以在设置时要从外到里进行设置。

7. 总结:

以上就是这次用递归动态生成XRTable时所领会到的经验和教训,特此总结,以便备用!

Dev Express Report 学习总结(四)Dev Express 动态生成XRTable使用总结的更多相关文章

  1. Dev Express Report 学习总结(八)Dev Express Reports 常见问题总结

    1. 在新建ASP.NET Dev Express Report时的两种方式: A. 右键Add DevExpress Item->New Item->All->从Web Repor ...

  2. Dev Express Report 学习总结(一) 基础知识总结

    Dev Express,一个非常优秀的报表控件.像其他报表一样,该报表也包括几个主要部分:Report Header,Page Header,Group Header,Detail,Group Foo ...

  3. Dev Express Report 学习总结(二)关于如何使用Grouping分组

    对于所有的报表工具来说,基本上所有Grouping功能的都很相似.正如前面说到的,Group处于Page Header和Page Footer之间,同时又将Detail包括与其中. 下面还是通过一个例 ...

  4. Dev Express Report 学习总结(七)Dev Express Reports 常见知识点总结

    1. CalculatedField中常见表达式: A. For percent: [ValA]* 100 / ([ValA]+[ ValB]);           PS. Please remre ...

  5. Dev Express Report 学习总结(六)Dev Express Reports自定义Summary

    在我们使用DevExpress开发报表的过程中,对于页面中复杂的数据合计,我们可能会使用到自定义Summary.下面通过一个例子来进行说明: 首先,我建立了如上图所示的报表页面,其中的数据源来自cla ...

  6. Dev Express Report 学习总结(三)关于子报表Sub-Report的使用

    子报表即在一个Report(主报表)中嵌入另一个Report(子报表),从理论上来讲,任何一个Report都可以作为一个子报表,但在实际使用过程中,只有主报表和子报表构成一对多关系时才会使用子报表.使 ...

  7. Dev Express Report 学习总结(五)在分组中使用聚集表达式AggregateExpression

    聚集表达式AggregateExpression主要包括几种:Avg(),Count(),Exists(),Max(),Min(),Single()和Sum().其中对于Sum(),在我看来主要有两种 ...

  8. Dev Express 动态生成XRTable使用总结

    1. XRTableCell常见属性  XRTableCell xrTableCell = new XRTableCell(); A. 字体及字体大小 xrTableCell.Font = new S ...

  9. Python 学习 第四篇:动态类型模型

    Python的变量不用声明,赋值之后就可以直接使用,类型是在运行过程中自动确定的,这就是动态类型模型.该模型把变量和对象设计成两个不同的实体,对象是存储数据的地方,对象的类型是由初始值自动决定的,而变 ...

随机推荐

  1. Redis了解

    1. 使用Redis有哪些好处? (1) 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1) (2) 支持丰富数据类型,支持string,li ...

  2. js/jq基础(日常整理记录)-3-一个自定义表格

    一.一个自定义的表格 这个js是我刚工作的时候,我们老大让我做一个功能,我觉得html自带的table功能单一,没有分页和排序功能,所有就尝试着做一下,所以这个东西就出来了.很久没写博客了,贴出来吧, ...

  3. 【IMOOC学习笔记】多种多样的App主界面Tab实现方法(二)

    Fragment实现Tab 首先把activity_main.xml 文件中的ViewPager标签改成Fragment标签 <FrameLayout android:id="@+id ...

  4. sql语句增加字段 索引

    alter table order_info add area varchar(50) create index group_compar on ry_order (group_compar);   ...

  5. Python3中实现简单的购物车程序

    product_list = [ ('iphone',5800), ('imac',15800), ('watch',9800), ('cloth',550), ('coffe latee',35), ...

  6. MAC的开机启动

    之前了解到MAC下的开机启动和定时自动运行不再沿用cron,而是有自己的launchctl:把启动文件放在/Library/LaunchDaemon/xxx.plist,里面可以记录运行的时间间隔.工 ...

  7. ubuntu - 14.04,安装CDT(Eclipse开发C++和C的插件)

    我已经安装完Eclipse了,我想把CDT加入到我的Eclipse里面. 一,下载CDT:我下载的是64位的CDT,下载地址:http://eclipse.bluemix.net/packages/m ...

  8. (转)Haar-like矩形遍历检测窗口演示Matlab源代码

    from:http://blog.sina.com.cn/s/blog_736aa0540101kzqb.html clc; clear; close all; % Haar-like特征矩形计算 b ...

  9. Nginx入门介绍与安装

    Nginx是什么? Nginx是俄罗斯人编写的十分轻量级的HTTP和反向代理服务器.发音:"engine X" Nginx能干什么? (1)Http反向代理 Nginx 支持正则表 ...

  10. 【转】如何恶搞朋友的电脑?超简单的vbs代码

    源地址:https://jingyan.baidu.com/article/d3b74d64aa1e6a1f77e609e6.html 表白源地址:https://jingyan.baidu.com/ ...