这样做并不是我想出来的,是之前做一个报表模板时搜的,原地址忘了

我要做的报表模板要求是传入一个DataTble,不管datatable的列数多少,计算列宽后显示报表

这是我的报表:

灰色那个XRtable是显示列标题的,下面那个是显示绑定数据的

下面是报表页面代码:

namespace OlenoUI.Report
{
public partial class XtraReport1 :DevExpress.XtraReports.UI.XtraReport
{
public XtraReport1()
{
InitializeComponent();
} public XtraReport1(DataTable ds)//构造函数重载
{
InitializeComponent();
DataTable dt = ds.Clone();
foreach (DataRow dr in ds.Rows)
dt.ImportRow(dr);
SetDataBind(dt);
}
private void SetDataBind(DataTable table)//绑定数据源
{
if (table==null||table.Columns.Count < 1) return;
if (table.Columns[0].ColumnName == "id")
{
table.Columns.Remove("id");
}
string lastColName=table.Columns[table.Columns.Count - 1].ColumnName;
if (lastColName == "初盘"||lastColName=="复盘")
{
table.Columns.Remove(table.Columns[table.Columns.Count - 1].ColumnName);
table.Columns.Add(lastColName);
foreach (DataRow row in table.Rows)
{
row[table.Columns[lastColName].ColumnName] = "囗";
}
}
DataSource = table; ///
int colWidth = this.PageWidth-this.Margins.Left-this.Margins.Right;
this.taday.Text = DateTime.Today.ToString("yyyy-MM-dd"); colWidth = colWidth / table.Columns.Count;
try
{
foreach (DataColumn dc in table.Columns)
{
XRTableCell[] colomnTittle = xrTable2.InsertColumnToLeft(xrTableCell2);
colomnTittle[0].Text = dc.ColumnName;
colomnTittle[0].Width = colWidth; XRTableCell[] columnsDetail = xrTable1.InsertColumnToLeft(xrTableCell1);
columnsDetail[0].Text = dc.ColumnName;
columnsDetail[0].Width = colWidth;
//绑定数据 参数含义分别为:绑定对应的属性名称(绑定columnsDetail[0]的Text属性),数据源,绑定对应的数据列
//还有 XRLabel也可以这样绑定数据哦
columnsDetail[0].DataBindings.Add("Text", DataSource, dc.ColumnName);
} this.count.Text+= CheckMain.Count;
this.checkMen.Text += CheckMain.CheckMen;
this.tittle.Text = CheckMain.Tittle;
xrTable2.DeleteColumn(xrTableCell2);
xrTable1.DeleteColumn(xrTableCell1);
}
catch { } } }
}

以上报表只有传递一个DataTable就可以调用了

XtraReport1 reprot=new XtraReport1(dt); dt是以查询出结果的DataTable

实现效果:

各位别吐槽,界面设计没花大工夫

横向打印:this.Landscape = true;  //

定义纸张:this.PaperKind = System.Drawing.Printing.PaperKind.A4Plus; //设置纸张

然后遇到超复杂动态表头报表时我是通过拼接XRTable方式拼命计算位置组成的,

不知大神们有何见解,请赐教!

xtraReprot 动态绑定数据 数据列动态的更多相关文章

  1. Oracle笔记(七) 数据更新、事务处理、数据伪列

    一.数据的更新操作 DML操作语法之中,除了查询之外还有数据的库的更新操作,数据的更新操作主要指的是:增加.修改.删除数据,但是考虑到emp表以后还要继续使用,所以下面先将emp表复制一份,输入如下指 ...

  2. yii2 数据导出 excel导出以及导出数据时列超过26列时解决办法

    作者:白狼 出处:http://www.manks.top/article/yii2_excel_extension​ 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给 ...

  3. DB2存储过程实现查询表数据,生成动态SQL,并执行

    一.动态执行SQL PREPARE S1 FROM 'delete from test'; EXECUTE S1; 二.使用游标 DECLARE V_CURSOR CURSOR FOR SELECT ...

  4. c#保存datagridview中的数据时报错 “动态SQL生成失败。找不到关键信息”

    ilovejinglei 原文 C#中保存datagridview中的数据时报错"动态SQL生成失败.找不到关键信息" 问题描述     相关代码 using System; us ...

  5. Java将数据按列写入Excel并设置格式(字体、背景色、自动列宽、对齐方式等)

    本文使用jxl.jar工具类库将数据按列写入Excel并设置格式(字体.背景色.自动列宽.对齐方式等). /** * 按列写入Excel并设置格式 * * @param outputUrl * 输出路 ...

  6. 图解Redis之数据结构篇——简单动态字符串SDS

    图解Redis之数据结构篇--简单动态字符串SDS 前言     相信用过Redis的人都知道,Redis提供了一个逻辑上的对象系统构建了一个键值对数据库以供客户端用户使用.这个对象系统包括字符串对象 ...

  7. 雷林鹏分享:jQuery EasyUI 数据网格 - 列运算

    jQuery EasyUI 数据网格 - 列运算 在本教程中,您将学习如何在可编辑的数据网格(datagrid)中包含一个运算的列.一个运算列通常包含一些从一个或多个其他列运算的值. 首先,创建一个可 ...

  8. mysql load数据第一列丢失

    mysql load数据第一列丢失 问题描述 MySQL表的结构如下: mysql> desc cms_msg_test_3; +----------------+--------------- ...

  9. Oracle的数据伪列(ROWNUM)

    作者:Vashon 时间:20150414 数据库:Oracle11g 数据伪列(ROWNUM) *范例:查询前5条记录:select rownum,empno,job,hiredate,sal fr ...

  10. 循序渐进VUE+Element 前端应用开发(27)--- 数据表的动态表单设计和数据存储

    在我们一些系统里面,有时候会需要一些让用户自定义的数据信息,一般这些可以使用扩展JSON进行存储,不过每个业务表的显示项目可能不一样,因此需要根据不同的表单进行设计,然后进行对应的数据存储.本篇随笔结 ...

随机推荐

  1. io外挂

    c++里最快的io方式是什么呢? 详见这里. 同时给出一个比较常用的方式,就是用fread.然后自己解析文本,而不是用cin或者scanf,见这里: //fast io test #include & ...

  2. Latex 中插入图片no bounding box 解决方案

    在windows下,用latex插入格式为jpg,png等图片会出现no bounding box 的编译错误,此时有两个解决办法: 1.将图片转换为eps格式的图片 \usepackage{grap ...

  3. php 实现简易模板引擎

    1.MVC简介 MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式(详情自己百度): 1. Model(模型)表示应用程序核心 ...

  4. PHP中require和include的区别

    include()与require()的功能相同 include(include_once) 与 require(require_once)都是把把包含的文件代码读入到指定位置来,但是二者再用法上有区 ...

  5. css sprite的使用心得

    提高网页显示速度最有效的一个方法是减少页面的HTTP请求次数,为了减少HTTP请求次数,最直接有效的方法是使用精灵图片(CSS sprites),精灵图片是把许多图片放到一张大图片里面,通过CSS来显 ...

  6. spring中JdbcTemplate的使用

    一.首先JdbcTemplate有一个DataSource类型的属性,所以需要在spring的配置文件中为JdbcTemplate的实例配置dataSource属性: <!-- 导入资源文件 - ...

  7. Linux相关

    可以用secureCRT远程连接Linux系统,进入tomcat,并且启动tomcat:bin/startup.sh 查看实时日志状态:tail -f logs/catalina.out

  8. JVM垃圾收集算法(标记-清除、复制、标记-整理)

     [JVM垃圾收集算法] 1)标记-清除算法: 标记阶段:先通过根节点,标记所有从根节点开始的对象,未被标记的为垃圾对象(错了吧?) 清除阶段:清除所有未被标记的对象 2)复制算法: 将原有的内存空间 ...

  9. apache 不执行PHP,显示代码

    首先检查是否安装PHP,已经安装过的话,先执行 locate libphp5.so 查看APACHE是否有SO文件,如果没有,那就要重装PHP了,先执行php -i | grep configure ...

  10. Struts2(result 流 )下载

    jsp: <body> <a href="stream.action?fileName=psb.jpg">psb</a> <br> ...