在前文《动态水晶报表:任意表,任意列,以及动态格线》中,
有一个地方还没有完全实现。就是根据内容自动调整表头的列,跟内容表格相对应。

我们也注意到了,在前文中,后面的列之所以不显示,不是因为它们没有了,它们是存在的,只是内容是空(''),注意是空,不是空格。
依此延伸开来,表头也可以用此原理来实现。

本文接上文,稍加改动
把原来的表头删除,放上6个参数字段,p1,p2...p6,都设置边框。设置好与字段的对齐。

然后,改进一下窗体的代码即可。

 1 using System;
 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

动态水晶报表:任意表,任意列 之 动态格线实现相关推荐

  1. 在水晶报表中动态显示任意格式的图片

    在水晶报表中动态显示任意格式的图片 如何在水晶报表中动态显示任意格式的图片        前段时间,Accounting 项目内需要在水晶报表中动态显示任意格式的图片.但是,水晶报表只支持OleDb的 ...

  2. 在水晶报表中实现任意选择指定字段显示-模板及C#升级版

    前文<在水晶报表中实现任意选择指定字段显示>中有朋友留言说是有无C#版本,最近有时间,重写了一下. 一是使用了VS2005 C#2.0 + Crystal Report 2008,另外就是 ...

  3. 水晶报表技术(3)——.NET 2005 中动态水晶报表的实现

    .NET 2005 中动态水晶报表的实现<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office ...

  4. c#水晶报表连接mysql_C# 用vs2008连接SQL数据库做动态水晶报表

    博主是个还在上大学的新手,如果有什么说错的地方请务必帮我指出来,谢谢! 想要完成一个能够动态改变其中数据的水晶报表,可以通过创建一个 数据的中转站来存储和输出数据的方式. 借由这个中转站,我们可以通过 ...

  5. JAVA水晶报表从环境搭建到创建动态水晶报表

    首先第一步贴上项目截图(少了一个rpt_report文件夹,因为是网上的所以这里没加,各位可以加下):声明该项目是网上下载.(比较简单,纯属偷懒,有现成环境).可以自己修改,需要注意的就是蓝色标记的地 ...

  6. 报表中利用隐藏列对扩展格显示值求和

    在润乾报表中,获取报表中单元格显示值的函数是disp(),然而这个函数却无法计算扩展单元格的显示值.从而无法直接对扩展个显示值求和. 在下图中,需要计算D3单元格的显示值之和. D3值为:ds1.再订 ...

  7. 在VB中使用水晶报表总结

    水晶报表(Crystal Report)是业内最专业.功能最强的报表系统,它除了强大的报表功能外,最大的优势是实现了与绝大多数流行开发工具的集成和接口.在VS.Net平台做过报表开发的程序员,一定都对 ...

  8. 水晶报表报表条码的处理方法

    之前找了N多资料都没有一个完整的实现办法,现在整理完整的实现办法,: 一.用水晶报表做表时: 1.做表电脑安装字体:code128\C39HrP24DhTt 2.设置水晶报表,将要打印为条码的字体设置 ...

  9. mysql交叉表查询列转行_SQL 转置计算

    转置即旋转数据表的横纵方向,常用来改变数据布局,以便用新的角度观察.有些转置算法比较简单,比如行转列.列转行.双向转置:有些算法变化较多,比如动态转置.转置时跨行计算.关联转置等.这些转置算法对日常工 ...

  10. ABAP 动态的实现任意表的ALV显示

    程序没有什么实用性,就是把一个表的内容全部显示出来了,仅用于看看数据都是什么样子的,但是其中的动态的方法还是值得研究学习的.这些方法是从我的前辈身上学到的,我小小的实践了一下,本来认为在编写程序的可以 ...

最新文章

  1. python升级和安装pip
  2. android.mk-编译文件学习(转载)
  3. 让IIS建立的站点默认是.net 2.0的,而不是.net 1.1的代码
  4. 虚机如果要访问SAN中的多个LUN,如何实现高可用
  5. jquery form 的beforeSubmit提交前的回调函数
  6. 如何快速入手一个JavaWeb项目
  7. OPA initialization
  8. Problem F. Grab The Tree HDU - 6324(树形dp+博弈)
  9. 我心中的核心组件(可插拔的AOP)~第十五回 我的日志组件Logger.Core(策略,模版方法,工厂,单例等模式的使用)...
  10. apk ionic 破损_ionic3-android打包完美解决
  11. 【元胞自动机】基于matlab元胞自动机模拟SEIR传播模型【含Matlab源码 2156期】
  12. 1 access中iif函数中的_在Access查询中使用IIF、Switch、Choose函数
  13. OLED12864(SSD1306)驱动代码
  14. Gossip费氏数列
  15. Anaconda 的Jupyter Notebook更换默认浏览器
  16. 25句经典语录 带你成长
  17. android平板外接显示器,iPad平板外接显示器教程 | iPad平板怎么外接显示器_什么值得买...
  18. CrossOrigin注解的方式实现接口的跨域访问
  19. 表情设计都有哪些技巧,分享做好表情设计的几个细节
  20. GeForce RTX 3090深度学习测评

热门文章

  1. erlang随机数问题
  2. 【一天一算法】冒泡排序
  3. Nginx+tomcat整合
  4. Mysql 的ERROR 1005 (HY000): Can't create table 'xxx' (errno: 150)
  5. boost::test
  6. .net中的装箱与拆箱!
  7. [网络流24题] 软件补丁问题
  8. vue属性绑定加载图片不成功
  9. php搜索区分大小写,在php中搜索不区分大小写的xpath
  10. c语言如何框出视频或图像中的车辆,视频图像中的车辆检测跟踪和分类