xtraReport使用之End User篇二

本文介绍如何在DevExpress的XtraReport中实现按部门的组合并功能,通过编写脚本控制相同部门间文本的显示与隐藏,达到美观的报表布局效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

使用背景:devexpress控件,版本v10.2,开发环境vs2010;

使用xtraReport开发,需要按组合并的功能,比如同一个部门的人需要这样显示:

这时就需要在xtraReport的字段域(比如上面的部门字段)写script脚本来实现了:
当然,首先要按部门分组,具体方法见之前文章,并在显示部门字段的XRTableCell上的script的BeforePrint事件中写如下代码:

private void cel_Dep_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e)
{
 if(GetCurrentColumnValue("DeptName")!=null)
{
  string sDep = GetCurrentColumnValue("DeptName").ToString();
  if (sDep != lbl_Dep.Text)
  {
      cel_Dep.Text = sDep;
      lbl_Dep.Text = sDep;
  }
  else   //如果当前值和变量相等,则输出""
  {
      cel_Dep.Text="";
  } 
 
}
}
其中 lbl_Dep为一放置在报表中的label,visible设为false,在这里起到一个变量的作用。

注意XRTableCell的边框设置:deptName的borders设为left,right;合计的borders设为all,
不过有点稍微的瑕疵,部门和合计的有些错位,还没找到好的解决办法,不过整体效果应该可以了。

### 在 DevExpress XtraReport 中将多个 XRTable 绑定到多个 DataTable 实例 当需要在一个 `XtraReport` 文档中展示来自多个 `DataTable` 的数据时,可以通过设置每个 `XRTable` 或其子控件(如 `XRTableCell`)的 `DataBindings` 属性来实现这一目标。下面详细介绍如何操作。 #### 多个 DataTable 和 XRTable 的绑定流程 首先,确保已创建了一个包含所需数量的 `DataTable` 的 `DataSet` 并将其分配给报表的 `DataSource` 属性[^1]。接着针对每张表单独定义各自的 `DataMember` 值以区分它们之间的关系[^2]。对于每一个 `XRTable` 及其内部单元格,则依据各自所属的数据成员执行相应的绑定动作。 以下是详细的代码示例: ```csharp using System; using System.Data; using DevExpress.XtraReports.UI; public class MultiTableXtraReport : XtraReport { public MultiTableXtraReport(DataSet multiTablesDataSet) { InitializeComponent(); // Assign the entire dataset as the report's DataSource. this.DataSource = multiTablesDataSet; // Bind first table (e.g., Products). var productsDetailBand = new DetailBand(); this.Bands.Add(productsDetailBand); var productTable = new XRTable() { WidthF = 500 }; productsDetailBand.Controls.Add(productTable); productTable.BeginInit(); // Begin initialization. var rowProductTitle = new XRTableRow(); productTable.Rows.Add(rowProductTitle); var cellProductName = new XRTableCell(); cellProductName.DataBindings.Add("Text", null, "Products.ProductName"); rowProductTitle.Cells.Add(cellProductName); var cellProductPrice = new XRTableCell(); cellProductPrice.DataBindings.Add("Text", null, "Products.UnitPrice"); rowProductTitle.Cells.Add(cellProductPrice); productTable.EndInit(); // End initialization after adding all rows/cells. // Set DataMember property accordingly so it knows which DataTable inside DataSet to refer. productsDetailBand.DataSource = this.DataSource; productsDetailBand.DataMember = "Products"; // Similarly bind second table (e.g., Orders). var ordersDetailBand = new DetailBand(); this.Bands.Add(ordersDetailBand); var orderTable = new XRTable() { WidthF = 500 }; ordersDetailBand.Controls.Add(orderTable); orderTable.BeginInit(); var rowOrderInfo = new XRTableRow(); orderTable.Rows.Add(rowOrderInfo); var cellOrderId = new XRTableCell(); cellOrderId.DataBindings.Add("Text", null, "Orders.OrderID"); rowOrderInfo.Cells.Add(cellOrderId); var cellCustomerName = new XRTableCell(); cellCustomerName.DataBindings.Add("Text", null, "Orders.CustomerName"); rowOrderInfo.Cells.Add(cellCustomerName); orderTable.EndInit(); ordersDetailBand.DataSource = this.DataSource; ordersDetailBand.DataMember = "Orders"; } } ``` 在这个例子中演示了两个独立部分——产品列表和订单记录——是如何被分别映射至不同的 `DataTable` 上并通过各自的 `DetailBand` 显示出来的[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值