动态水晶报表:任意表,任意列 之 动态格线实现
在前文《动态水晶报表:任意表,任意列,以及动态格线》中,
有一个地方还没有完全实现。就是根据内容自动调整表头的列,跟内容表格相对应。
我们也注意到了,在前文中,后面的列之所以不显示,不是因为它们没有了,它们是存在的,只是内容是空(''),注意是空,不是空格。
依此延伸开来,表头也可以用此原理来实现。
本文接上文,稍加改动
把原来的表头删除,放上6个参数字段,p1,p2...p6,都设置边框。设置好与字段的对齐。
然后,改进一下窗体的代码即可。
2 using System.Collections.Generic;
3 using System.ComponentModel;
4 using System.Data;
5 using System.Text;
6 using System.Windows.Forms;
7 using CrystalDecisions.Shared;
8 using CrystalDecisions.CrystalReports.Engine;
9 using CrystalDecisions.Windows.Forms;
10 using System.Data.OleDb;
11 namespace DyCrystalReportDemo
12 {
13 public partial class Form1 : Form
14 {
15 public Form1()
16 {
17 InitializeComponent();
18 }
19
20 private void button1_Click(object sender, EventArgs e)
21 {
22 String tblName = comboBox1.Text ;
23 String connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + System.Threading.Thread.GetDomain().BaseDirectory+ "bbtcrall.mdb" + ";";
24
25 if (tblName == "")
26 {
27 MessageBox.Show("请选择表名");
28 comboBox1.Focus();
29 return;
30 }
31
32 //打开数据库连接
33
34 DataTable dt1 = new DataTable();
35 DataTable dtx = new DataTable();
36 OleDbDataAdapter da = new OleDbDataAdapter();
37 OleDbConnection cn = new OleDbConnection(connstr);
38
39 //打开选择的表(注意进行错误保护)
40
41 //如果要实现任意列,只要更改此处的SQL为具体的字段即可
42 da = new OleDbDataAdapter("SELECT * From " + tblName, cn);
43 da.Fill(dt1);
44
45 //根据dtl获得实际列数
46 int cols = dt1.Columns.Count;
47
48
49 //处理ds1
50 clsDyCrystalReportCore xCore = new clsDyCrystalReportCore();
51 dtx = xCore.dtx(dt1);
52
53 ReportDocument myReport = new ReportDocument();
54 string reportPath = System.Threading.Thread.GetDomain().BaseDirectory + "crystalreport1.rpt";
55 myReport.Load(reportPath);
56
57 //绑定数据集,注意,一个报表用一个数据集。
58
59 myReport.SetDataSource(dtx);
60
61 //设置参数,即表头
62 for (int i = 1; i <= 6; i++)
63 {
64 if (i <= cols)
65 myReport.SetParameterValue("p" + i.ToString(), "列名" + i.ToString());
66 else
67 //注意,这个不能省,一定要给没用到的参数一个空值
68 myReport.SetParameterValue("p" + i.ToString(), "");
69 }
70 crystalReportViewer1.ReportSource = myReport;
71 //crystalReportViewer1.RefreshReport();
72 }
73
74 private void Form1_Load(object sender, EventArgs e)
75 {
76 comboBox1.Items.Add ("Test1_1");
77 comboBox1.Items.Add ("Test1_2");
78 }
79
80 private void crystalReportViewer1_Load(object sender, EventArgs e)
81 {
82
83 }
84 }
85 }
86
不好意思,偷懒了,没对齐。
稍加说明:
1: //根据dtl获得实际列数
int cols = dt1.Columns.Count;
2: //设置参数,即表头
for (int i = 1; i <= 6; i++)
{
if (i <= cols)
myReport.SetParameterValue("p" + i.ToString(), "列名" + i.ToString());
else
//注意,这个不能省,一定要给没用到的参数一个空值
myReport.SetParameterValue("p" + i.ToString(), "");
}
3://crystalReportViewer1.RefreshReport();
这个要注意,这里注释掉了,因为每次刷新的时候,参数窗口会重新弹出来。
所以要使用参数功能的话,尽量把toolbar上的刷新按钮禁止掉。防止出问题。
转载于:https://www.cnblogs.com/babyt/archive/2009/05/20/1462337.html
动态水晶报表:任意表,任意列 之 动态格线实现相关推荐
- 在水晶报表中动态显示任意格式的图片
在水晶报表中动态显示任意格式的图片 如何在水晶报表中动态显示任意格式的图片 前段时间,Accounting 项目内需要在水晶报表中动态显示任意格式的图片.但是,水晶报表只支持OleDb的 ...
- 在水晶报表中实现任意选择指定字段显示-模板及C#升级版
前文<在水晶报表中实现任意选择指定字段显示>中有朋友留言说是有无C#版本,最近有时间,重写了一下. 一是使用了VS2005 C#2.0 + Crystal Report 2008,另外就是 ...
- 水晶报表技术(3)——.NET 2005 中动态水晶报表的实现
.NET 2005 中动态水晶报表的实现<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office ...
- c#水晶报表连接mysql_C# 用vs2008连接SQL数据库做动态水晶报表
博主是个还在上大学的新手,如果有什么说错的地方请务必帮我指出来,谢谢! 想要完成一个能够动态改变其中数据的水晶报表,可以通过创建一个 数据的中转站来存储和输出数据的方式. 借由这个中转站,我们可以通过 ...
- JAVA水晶报表从环境搭建到创建动态水晶报表
首先第一步贴上项目截图(少了一个rpt_report文件夹,因为是网上的所以这里没加,各位可以加下):声明该项目是网上下载.(比较简单,纯属偷懒,有现成环境).可以自己修改,需要注意的就是蓝色标记的地 ...
- 报表中利用隐藏列对扩展格显示值求和
在润乾报表中,获取报表中单元格显示值的函数是disp(),然而这个函数却无法计算扩展单元格的显示值.从而无法直接对扩展个显示值求和. 在下图中,需要计算D3单元格的显示值之和. D3值为:ds1.再订 ...
- 在VB中使用水晶报表总结
水晶报表(Crystal Report)是业内最专业.功能最强的报表系统,它除了强大的报表功能外,最大的优势是实现了与绝大多数流行开发工具的集成和接口.在VS.Net平台做过报表开发的程序员,一定都对 ...
- 水晶报表报表条码的处理方法
之前找了N多资料都没有一个完整的实现办法,现在整理完整的实现办法,: 一.用水晶报表做表时: 1.做表电脑安装字体:code128\C39HrP24DhTt 2.设置水晶报表,将要打印为条码的字体设置 ...
- mysql交叉表查询列转行_SQL 转置计算
转置即旋转数据表的横纵方向,常用来改变数据布局,以便用新的角度观察.有些转置算法比较简单,比如行转列.列转行.双向转置:有些算法变化较多,比如动态转置.转置时跨行计算.关联转置等.这些转置算法对日常工 ...
- ABAP 动态的实现任意表的ALV显示
程序没有什么实用性,就是把一个表的内容全部显示出来了,仅用于看看数据都是什么样子的,但是其中的动态的方法还是值得研究学习的.这些方法是从我的前辈身上学到的,我小小的实践了一下,本来认为在编写程序的可以 ...
最新文章
- python升级和安装pip
- android.mk-编译文件学习(转载)
- 让IIS建立的站点默认是.net 2.0的,而不是.net 1.1的代码
- 虚机如果要访问SAN中的多个LUN,如何实现高可用
- jquery form 的beforeSubmit提交前的回调函数
- 如何快速入手一个JavaWeb项目
- OPA initialization
- Problem F. Grab The Tree HDU - 6324(树形dp+博弈)
- 我心中的核心组件(可插拔的AOP)~第十五回 我的日志组件Logger.Core(策略,模版方法,工厂,单例等模式的使用)...
- apk ionic 破损_ionic3-android打包完美解决
- 【元胞自动机】基于matlab元胞自动机模拟SEIR传播模型【含Matlab源码 2156期】
- 1 access中iif函数中的_在Access查询中使用IIF、Switch、Choose函数
- OLED12864(SSD1306)驱动代码
- Gossip费氏数列
- Anaconda 的Jupyter Notebook更换默认浏览器
- 25句经典语录 带你成长
- android平板外接显示器,iPad平板外接显示器教程 | iPad平板怎么外接显示器_什么值得买...
- CrossOrigin注解的方式实现接口的跨域访问
- 表情设计都有哪些技巧,分享做好表情设计的几个细节
- GeForce RTX 3090深度学习测评
热门文章
- erlang随机数问题
- 【一天一算法】冒泡排序
- Nginx+tomcat整合
- Mysql 的ERROR 1005 (HY000): Can't create table 'xxx' (errno: 150)
- boost::test
- .net中的装箱与拆箱!
- [网络流24题] 软件补丁问题
- vue属性绑定加载图片不成功
- php搜索区分大小写,在php中搜索不区分大小写的xpath
- c语言如何框出视频或图像中的车辆,视频图像中的车辆检测跟踪和分类