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时所领会到的经验和教训,特此总结,以便备用!

最新文章

  1. Win10系统下安装Tensorflow
  2. java 的 (PO,VO,TO,BO,DAO,POJO) 解释
  3. java Socket用法详解(转)
  4. Hibernate逍遥游记-第7章 Hibernate的检索策略和检索方式(&lt;set lazy=&quot;false&quot; fetch=&quot;join&quot;&gt;、left join fetch、FetchMode.JOIN、)
  5. cocos2d-x CCListView
  6. C# Assembly类_反射
  7. RS485中继器电路(转)
  8. pod install 出现 Unable to find a specification for `xxxxx` 解决方案
  9. 如何用git命令生成Patch和打Patch
  10. obj-c编程07:异常处理
  11. crontab语法
  12. windows下共享式服务开发
  13. Symantec Backup Exec 2010 安装报 bad ELF interpreter: No such file or directory
  14. Java动态生成类以及动态添加属性
  15. Centos6.8 Mysql5.6 安装配置教程(转)
  16. 《HTML5与CSS3基础教程(第8版)》
  17. python webdriver api-上传文件的三种方法
  18. Validate the date format
  19. 本周实验PSP0 过程文档
  20. NTP路由器配置

热门文章

  1. JQuery 筛选器
  2. 【转载】调试利器 autoexp.dat
  3. SQL 还原数据库
  4. 使用filter获取http请求的出参以及入参
  5. php就业网版本已改版成功
  6. oracle wrapped 代码解密工具 unwraper
  7. js实现控制日期月份增减
  8. stack栈
  9. build/envsetup.sh 生成的命令详解表
  10. 理解#define offsetof(struct_t,member) ((int)&amp;((struct_t *)0)-&gt;member)