VS2008自帶了水晶報表10.5的開發(fā)版本,該版本的水晶報表聲明中可以由開發(fā)者自由發(fā)布. VC2008中使用該版本的水晶.按如下方式操作: 1.用VC6.0生成一個對話框工程.對話框上右鍵->插入ActiveX組件->選Crystal ActiveX Report View Control 10.5,Ctrl鍵雙擊這個插入的組件,會出來映射變量向?qū)?輸入變量名 m_View. 其他都默認(rèn),提示你插入兩個類時,就確定.這個步驟在.net里會出異常,只能通過老VC來生成.比較惡心. 在stdafx.h里加入 #import "C:\\Program Files\\Business Objects\\Common\\2.8\\bin\\craxddrt.dll" no_namespace
老VC的工程就能運行了.OK,接下來把這些東東放到VC.net工程里. 2.創(chuàng)建.net VC/MFC工程. 把上一步自動加入的兩個水晶類加到你工程里.在stdafx.h里加上: #import "C:\\Program Files\\Business Objects\\Common\\2.8\\bin\\craxddrt.dll" no_namespace
#include "CrystalReportViewer10.h" 把上一步中映射變量的 DDX_Control(pDX, IDC_VIEW1, m_View);
考到你的相應(yīng)類里. 在你使用該水晶控件的Dialog的 .h文件里定義: IApplicationPtr m_Application;
IReportPtr m_Report; CCrystalReportViewer10 m_View;//這是你映射的控件變量 在該對話框的 OnInitDialog里加入: ShowWindow(SW_MAXIMIZE);
CString strFileRpt="C:""Fuck.rpt"; CString strFileXml="C:""Fuck.xml"; m_Application.CreateInstance (__uuidof(Application)); m_Report =m_Application->OpenReport(_bstr_t(strFileRpt)); IDatabasePtr pDB=m_Report->Database; pDB->Tables->Item[1]->Location=_bstr_t(strFileXml); m_View.SetReportSource(m_Report); m_View.SetDisplayToolbar (TRUE); m_View.SetDisplayGroupTree (FALSE); m_View.SetDisplayBorder (FALSE); m_View.SetDisplayTabs(FALSE); m_View.Refresh (); //調(diào)用下面兩行中的一行: m_View.ViewReport();//預(yù)覽. m_Report->PrintOut();//不預(yù)覽,直接打印 3.程序的打包與發(fā)布: 做安裝包時,把水晶10.5的安裝目錄下所有文件(默認(rèn)是C:"Program Files"Business Objects"Common"2.8"bin)都考到與你的可執(zhí)行文件同一目錄.然后把所有的dll都注冊一下就OK了,也就是所有加進(jìn)去的水晶的東東,只要是dll,就 regsvr32 他一下.現(xiàn)在的打包工具應(yīng)該都支持安裝時注冊組件功能.這我就不細(xì)說了.還有就是水晶這個垃圾發(fā)布時需要 .net framework 2.0至少.唉,這個自己打包吧,唉,要多惡心有多惡心!! 以上是我在 VC.net2008中實際使用水晶的實踐經(jīng)驗總結(jié).按以上步驟打包后可以在無水晶的機(jī)器上順利運行.有些步驟比較惡心.比如說第一步,老VC中完全支持插入水晶的ActiveX控件并順利映射變量.但 VC.net2008里面確不行.只好借雞生蛋.用老VC生好現(xiàn)成的代碼后再加到VC.net2008工程中. 當(dāng)然你要是用C#開發(fā)的水晶的話就簡單多了,網(wǎng)上例子一堆堆的,但唯獨就是沒VC.net2008的. |
|