#开始使用:Grid++Report 可以在 Visual C#.Net 与 Visual Basic.Net 下的 WinForm 项目中使用。在项目中使用 Grid++Report 之前,首先必须对 Grid++Report 的引用。

在 Visual Studio.Net(2003/2005/2008/2010)中引用 Grid++Report 的过程:

首先打开或新建 Visual Studio.Net 项目。

★在‘工具箱’面板中加入 Grid++Report 对应构件:
1、在‘工具箱’面板中右击鼠标按钮打开弹出式关联菜单,执行菜单项‘添加/移除项...’,打开‘自定义工具箱’窗口。(注:VS.Net2005及以后版本的菜单项名称为‘选择项...’,窗口名为‘选择工具箱’。)
2、在‘自定义工具箱’窗口中选择‘COM’选项卡,从列表中选取对‘Grid++Report DisplayViewer 5.6’与‘Grid++Report PrintViewer 5.6’两项。 
3、执行‘确定’按钮关闭‘自定义工具箱’窗口,在‘工具箱’面板中会加入两个控件项:‘Grid++Report DisplayViewer 5.6’与‘Grid++Report PrintViewer 5.6’,此时我们可以象使用其它控件一样使用这两个控件。 
4、如果在项目中需要为用户提供运行时设计报表的功能,需要使用类似的过程加入对‘Grid++Report Designer 5.6’的引用。

★在项目中加入 Grid++Report 类型库的引用:
1、打开 ‘解决方案资源管理器’窗口,展开项目节点。 
2、在‘引用’节点上右击鼠标按钮打开弹出式关联菜单,执行菜单项‘添加引用...’,打开‘添加引用’窗口。 
3、在‘添加引用’窗口中选择‘COM’选项卡,在列表中双击‘Grid++Report Engine5.0 Type Library’项。 
4、执行‘确定’按钮关闭‘添加引用’窗口,完成添加过程。 
5、如果在项目中需要为用户提供运行时设计报表的功能,需要使用类似的过程加入对‘Grid++Report Designer5.0 Type Library’的引用。 
注:如果在设计 Form 上要加入查询显示控件或打印显示控件,上面对类型库的引用步骤可以不做,因为在控件被加入到 Form 中的时候,项目会自动加入对类型库的引用。

★关于C#与VB.NET开发兼容64位WinForm程序说明:
设置WinForm 项目的目标平台为“x86”可以保证用 Grid++ 开发的软件在64位Windows下正常运行。设置说明:
1、C#: 项目->属性->生成->目标平台->x86
2、VB.NET: 项目->属性->编译->高级编译选项...->目标CPU->x86
3、也可以在项目的配置管理器中将“Any CPU”平台去掉,增加“x86”平台。操作菜单:生成->配置管理器->活动解决方案平台,下拉选择“新建...”项可以在打开的对话框中增加“x86”平台,下拉选择“编辑...”项可以在打开的对话框中移除“Any CPU”平台。 
4、如果是在Windows7 64位或其它64位系统下开发,也一定要按以上要求设置项目的目标平台。
5、在 VS2005/2008/2010 中都通过测试,在Windows server 2008与Windows7 的 64 位系统下都可以正常发布。例子 11.CustomDesign 升级到VS2005/2008/2010 并把目标平台改为“x86”,制作出来的安装程序就可以在各种Windows系统下安装运行。

★发布你的项目,用VS.NET制作安装程序:
1、先创建安装项目:在解决方案资源管理器的根节点上点右键,在弹出的菜单里执行“添加->新建项目...”,创建一个“安装项目”。
2、加入项目发布文件:在解决方案资源管理器的新创建的安装项目节点上点右键,在弹出的菜单里执行“添加->项目输出...”,在打开的窗口里选择“主输出”,这样可以把程序的发布文件自动加入到安装项目中。
3、设置Grid++Report的DLL文件为COM自注册:分别设置“gregn50.dll”与“grdes50.dll”的“Register”属性为“vsdrfCOMSelfReg”。

★关于C#与VB.NET中数据多次重复填入的问题:
原因: 挂接报表事件的代码被多次执行,因此同一事件函数被多次挂接上;在事件一次触发过程中,这个事件函数会被多次调用。如 FetchRecord 事件就会多次填入报表数据,从而造成报表数据重复。
解决方式1:移动挂接报表事件的代码的位置,让这些代码只执行一次。一般是在 From 的启动函数或事件中。如下C#与VB.NET代码:
public Form1()
{
 ...

//连接报表事件
 Report.Initialize += new _IGridppReportEvents_InitializeEventHandler(ReportInitialize);
 Report.FetchRecord = new _IGridppReportEvents_FetchRecordEventHandler(ReportFetchRecord);
 Report.GroupBegin += new _IGridppReportEvents_GroupBeginEventHandler(ReportGroupBegin);
 Report.ProcessRecord += new _IGridppReportEvents_ProcessRecordEventHandler(ReportProcessRecord);
 Report.SectionFormat += new _IGridppReportEvents_SectionFormatEventHandler(ReportSectionFormat);

...
}
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
 ...

'连接报表事件
        AddHandler Report.Initialize, AddressOf ReportInitialize
        AddHandler Report.FetchRecord, AddressOf ReportFetchRecord
        AddHandler Report.ProcessRecord, AddressOf ReportProcessRecord
        AddHandler Report.GroupBegin, AddressOf ReportGroupBegin
        AddHandler Report.SectionFormat, AddressOf ReportSectionFormat
 
 ...
End Sub
解决方式2:在挂接事件前,先移除原来的挂接事件。如下C#与VB.NET代码:
 Report.FetchRecord -= new _IGridppReportEvents_FetchRecordEventHandler(ReportFetchRecord);
 Report.FetchRecord += new _IGridppReportEvents_FetchRecordEventHandler(ReportFetchRecord);

RemoveHandler Report.FetchRecord, AddressOf ReportFetchRecord
        AddHandler Report.FetchRecord, AddressOf ReportFetchRecord

grid++报表使用时注意事项的更多相关文章

  1. MySQL数据库使用时注意事项

    MySQL数据库使用时注意事项 建表的角度上 1.合理安排表关系 2.尽量把固定长度的字段放在前面 3.尽量使用char 代替varchar 4.分表:水平分和垂直分 在使用sql语句的时候 1.尽量 ...

  2. angular js 上传插件 ng-file-upload 使用时注意事项

    项目框架为angular js,需要用到文件上传,百度之后先选择了angular-file-upload,githuab上API文档很全,想要具体了解,可以仔细研究一下.在这里简单回顾一下自己使用的插 ...

  3. UITableViewCell使用时注意事项

    1,注意使用重用机制(有利于提高效率) 2,做到通过改变模型去间接改变UI样式(做到永久改变,无论怎样拖动刷新,都不会恢复改变) 3,在通过传递模型给Cell控件布局时,记得完全覆盖(嗯,不好解释,主 ...

  4. oracle中sqlldr工具使用时注意事项

    1.命令写在一行:如,sqlldr sh/&sh_pass@&connect_string control=&ctl_file data=&dat_file log=& ...

  5. Spring @Conditional简单使用 以及 使用时注意事项一点

    @Conditional注解在类的方法中 @Conditional注解失效的一种原因 @Conditional注解在类上 手写的低配版@ConditionalOnClass Spring  @Cond ...

  6. LigerUI中Grid的使用时关于url请求不到数据的问题

    前台代码:(这里贴的是js的代码,完整的代码可以在LigerUI的文档中找到), 这里使用的是url请求数据,问题不是处在前台,所以就不细说. $("#maingrid").lig ...

  7. free函数使用时的注意事项。

    free函数是我们在写C语言程序时常用的函数,但是使用时需要注意,一不小心很肯能会引起吐核. 注意:free函数与malloc()函数配对使用,malloc函数释放申请的动态内存.对于free(p)这 ...

  8. time.h文件中包含的几个函数使用时须注意事项

    time.h头文件中包含以下函数 char* asctime(const struct tm *tm); char* asctime_r(const struct tm *tm,char *buf); ...

  9. Eclipse和Android Studio中的DDMS使用时什么不同?

    http://www.jb51.net/softjc/454131.html Eclipse和Android Studio中的DDMS使用时什么不同? 相信很多经常开发Android应用的朋友应该都接 ...

随机推荐

  1. APP测试工具与技术

    AndroidDevTools Android Dev Tools官网地址:www.androiddevtools.cn 收集整理Android开发所需的Android SDK.开发中用到的工具.An ...

  2. 自学Python的经验之谈,学好Python的捷径

    其实python非常适合初学者入门.相比较其他不少主流编程语言,有更好的可读性,因此上手相对容易.自带的各种模块加上丰富的第三方模块,免去了很多“重复造轮子”的工作,可以更快地写出东西.配置开发环境也 ...

  3. FFmpeg 学习(四):FFmpeg API 介绍与通用 API 分析

    一.FFmpeg 相关术语 1. 容器/文件(Container/File):即特定格式的多媒体文件,比如MP4,flv,mov等. 2. 媒体流(Stream):表示在时间轴上的一段连续的数据,比如 ...

  4. 使用jQuery获取元素的宽度或高度的几种情况

    今天说说使用jQuery获取元素大小的遇到几种情况 使用jQuery获取元素的宽度或高度的有几种情况: 1.使用width(),它只能获取当前元素的内容的宽度: 2.使用innerWidth(),它只 ...

  5. CoCos2dx开发:tile地图绘制和Tiled工具的基本使用

    1.新建地图: 在Tiled工具里新建文件: 设置地图的地图大小和地图块大小: 新建好的空文件如下: 2.绘制图块: 在Aseprite中建立相应大小(注意:划分的图块为32*32,因此图片大小最好与 ...

  6. Java 多线程(三)—— 线程的生命周期及方法

    这篇博客介绍线程的生命周期. 线程是一个动态执行的过程,它也有从创建到死亡的过程. 线程的几种状态 在 Thread 类中,有一个枚举内部类: 上面的信息以图片表示如下: 第一张图: 第二张图:把等待 ...

  7. 如何在.NET Core控制台程序中使用依赖注入

    背景介绍 依赖注入(Dependency Injection), 是面向对象编程中的一种设计原则,可以用来减低代码之间的耦合度.在.NET Core MVC中 我们可以在Startup.cs文件的Co ...

  8. macOS webview编程

    好像是macOS10.10之后,以及iOS8之后,新出现的WKWebview组件就迅速的替代了Webview及UIWebView.后者的确存在一些无法解决的bug,诸如架构导致的速度缓慢和内存泄漏. ...

  9. Python包的导入说明

    import 模块 from 包 import 模块 上面的代码有什么区别呢? from 模块 import * 这种导入想象与把模块里面的代码都复制到当前模块中(也就是该语句所在位置),这时候你可以 ...

  10. Python:游戏:测试打字速度

    现在写书的人真是一点责任心都没有,最近看了几本书,其中的代码都存在错误. 最近迷恋 Python 游戏,买了<Python游戏编程入门>[美] Jonathan S·Harbour 著 一 ...