grid++報表使用時注意事項


#開始使用: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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM