中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

VC2015調用Grid++report報表控件

發布時間:2020-06-15 05:54:05 來源:網絡 閱讀:1380 作者:Chinayu2014 欄目:編程語言

Grid++report這是一個國產報表控件,從2.x就開始接觸,基本所有的學習資源,來自于自帶的文檔和例子。能學多少靠摸索。整體功能還是不錯的。他提供了3個控件,一個組件。在VC2015如果不想用控件,只想調用組件實現打印的功能,怎么辦呢?步驟如下:

(1)在afxstd.h文件中包含頭文件如下:

#include <atlbase.h>
extern CComModule _Module;
#include <atlcom.h>

(2)在程序APP文件中,聲明如下:

CComModule _Module;//全局變量
BOOL CMFCApplication1App::InitInstance()
{//初始化報表COM組件
    HRESULT hRes = ::CoInitialize(NULL);
    ATLASSERT(SUCCEEDED(hRes));
    _Module.Init(0, AfxGetInstanceHandle());
    //......
}
int CMFCApplication1App::ExitInstance()
{//重寫虛函數
    _Module.Term();
    ::CoUninitialize();
    return CWinApp::ExitInstance();
}

(3)在對話框的頭文件中,加入如下:

#include "GetPath.h"
#include "GRImport.h"

(4)當然需要先將Grid++report目錄下的Utility文件夾復制到工程目錄中,并在“項目屬性->VC++目錄->包含目錄”添加Utility文件夾。

(5)在對話框窗口類中添加成員變量:IGridppReportPtr   m_pGridppReport;

//.h文件中添加
private:
   IGridppReportPtr   m_pGridppReport;
//.cpp文件中
BOOL CMFCApplication1Dlg::OnInitDialog()
{
     //創建報表主對象
     m_pGridppReport.CreateInstance(__uuidof(GridppReport));
     ATLASSERT(m_pGridppReport != NULL);
     //加載模板文件
     //從文件中載入報表模板數據到報表主對象
     CString FileName = GetReportTemplatePath(_T("標準過磅單1.grf"));
     m_pGridppReport->LoadFromFile((LPCTSTR)FileName);
     //第(7)步還有代碼
}
void CMFCApplication1Dlg::OnDestroy()
{
     CDialogEx::OnDestroy();
     //釋放主報表對象
     m_pGridppReport.Release();
}
void CMFCApplication1Dlg::OnBnClickedButton1()
{
     //直接打印報表
     m_pGridppReport->Print(TRUE);
}
void CMFCApplication1Dlg::OnBnClickedButton2()
{
     // 顯示預覽窗口
     m_pGridppReport->Title = _T("標準過磅單1");
     m_pGridppReport->PrintPreview(TRUE);
}

(6)同時將導出庫復制到工程路徑下,即gregn.tlb 和 grdes.tlb

(7)要動態修改報表參數,可以新建一個類,繼承報表事件處理接口。

//Scale3DCReportEvent.h頭文件
#pragma once
#include "GridppReportEventImpl.h"

class CScale3DCReportEvent :public CGridppReportEventImpl
{
public:
	CScale3DCReportEvent();
	~CScale3DCReportEvent();
	
        //初始化時自動調用
	virtual void Initialize(void);
	//填充數據時自動調用
	virtual void FetchRecord(void);
	//需要傳入主報表對象
	IGridppReportPtr m_pGridppReport;
	//如果要推數據進報表,需要定義字段接口
	IGRFieldPtr   m_SerialNo;
};
//Scale3DCReportEvent.cpp文件
#include "stdafx.h"
#include "Scale3DCReportEvent.h"
#include "GridppReportEventImpl.c"

CScale3DCReportEvent::CScale3DCReportEvent()
{
}
CScale3DCReportEvent::~CScale3DCReportEvent()
{
}
void CScale3DCReportEvent::Initialize(void)
{
    //報表中的參數賦值
    m_pGridppReport->ParameterByName(_T("車號"))->AsString =_T("獵豹太空梭0X29");
    //獲取字段接口
    m_SerialNo  = m_pReportView->m_pGridppReport->FieldByName("磅單流水號");
}
void CScale3DCStandardReportEvent::FetchRecord(void)
{//為字段接口賦值
	for (INT i = 0;i< m_db.m_data.size(); i++)
	{
		m_pReportView->m_pGridppReport->DetailGrid->Recordset->Append();
		FillRecord1(i);
		m_pReportView->m_pGridppReport->DetailGrid->Recordset->Post();
	}
}

(8)在相應的對話框頭文件中包含:

#include "Scale3DCReportEvent.h"//事件包裝類

#include "GetPath.h"  //上面步驟已包含過

#include "GRImport.h"

在窗口類中聲明成員變量:

//.h文件中
private:
CGridppReportEventImpl *m_pReportEvents;//報表事件代理指針
IGridppReportPtr   m_pGridppReport;//報表主對象

在窗口的OnInitDialog()中添加如下代碼:

//創建事件響應對象
CComObject<CScale3DCReportEvent> *pEvent;
CComObject<CScale3DCReportEvent>::CreateInstance(&pEvent);
m_pReportEvents = pEvent;
m_pReportEvents->AddRef();
pEvent->m_pGridppReport = m_pGridppReport;//事件代理指針
HRESULT hr = m_pReportEvents->DispEventAdvise(m_pGridppReport, 
             &__uuidof(_IGridppReportEvents));
ATLASSERT( SUCCEEDED(hr) );

(9)在調用中添加ON_WM_DESTROY消息,第5步中添加過,所以繼續添加代碼:

//釋放事件代理
if (m_pReportEvents != NULL)
{
    HRESULT hr = m_pReportEvents->DispEventUnadvise(m_pGridppReport, 
                 &__uuidof(_IGridppReportEvents));
    m_pReportEvents->Release();
    m_pReportEvents = NULL;
    ATLASSERT(SUCCEEDED(hr));
}
//釋放主報表對象
m_pGridppReport.Release();
//釋放接口指針
m_pPrintViewer.Release();

(10)報表顯示控件的使用

m_printView.Stop();
CString FileName = GetReportTemplatePath(strFileName);
m_pGridppReport->LoadFromFile((LPCTSTR)FileName);
m_printView.put_Report(m_pGridppReport);
m_printView.Refresh();
m_printView.Start();
m_printView.ZoomToHeight();

其他功能:

(1)報表設計器控件使用

在窗口上放上報表設計器控件,在窗口頭文件中加入:

#include "GetPath.h"
#include "GRImport.h"
#include "GridppReportEventImpl.h"

//聲明成員變量:
//關聯控件
CGrdesigner1 m_DesignReport;
IGRDesignerPtr  m_pDesigner;//接口指針	
//傳入一個主報表對象
IGridppReportPtr   m_pGridppReport;
//添加宏聲明
DECLARE_EVENTSINK_MAP()

在窗口的.CPP文件中加入如下內容:

#include "GridppReportEventImpl.c"
BEGIN_EVENTSINK_MAP(CScale3DCBillDeisgnDlg, CDialogEx)
	//{{AFX_EVENTSINK_MAP(CScale3DCBillDeisgnDlg)
	ON_EVENT(CScale3DCBillDeisgnDlg, IDC_GRDESIGNER1, 7 /* SaveReport */, 
	                   OnSaveReport, VTS_NONE)
	//}}AFX_EVENTSINK_MAP
	ON_EVENT(Scale3DCDesignReportDlg, IDC_GRDESIGNER1, 5, 
	DataChangeGrdesigner1, VTS_NONE)//報表內容已改變
END_EVENTSINK_MAP()

VOID CScale3DCBillDeisgnDlg::OnSaveReport()
{//響應報表設計控件上的按鈕事件
	AfxMessageBox(_T("ok"));
	m_pDesigner->DefaultAction = FALSE;
}
void Scale3DCDesignReportDlg::DataChangeGrdesigner1()
{//報表內容已改變
	m_pDesigner->Dirty = TRUE;
}

在窗口的OnInitDialog函數中加入如下代碼:

//報表設計容器指針
LPUNKNOWN spUnk = m_DesignReport.GetControlUnknown();
spUnk->QueryInterface(__uuidof(IGRDesigner), (void**)(&m_pDesigner));
ATLASSERT(m_pDesigner != NULL);
m_pDesigner->Report = m_pGridppReport;//編定報表主對象

(2)Grid++report報表中使用js腳本

var  price = Sender.DisplayText
if (price == "")
Sender.DisplayText = "0元"
else
Sender.DisplayText = price+"元"


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

绥化市| 沧源| 沾化县| 贵南县| 宜宾市| 平塘县| 高要市| 金山区| 达尔| 井研县| 新巴尔虎左旗| 临漳县| 丰都县| 木兰县| 柘荣县| 闵行区| 虹口区| 金溪县| 达孜县| 金平| 左云县| 清流县| 高台县| 泰和县| 青神县| 凯里市| 神农架林区| 马尔康县| 青岛市| 乌恰县| 灵武市| 神木县| 长治市| 巴塘县| 西峡县| 福鼎市| 万山特区| 绥棱县| 尼木县| 襄汾县| 崇义县|