vs2008 MFC 对话框 grid++ report 使用经验总结

grid++ report  在不使用数据库的情况下如何使用的问题;

 

看grid++ report的例子都是从数据库中获取记录的,没有从外部输入数据的情况,参考grid++ report 5.6的例子;

class CScatterChartEvent :public CGridppReportEventImpl
{
public:
	virtual void Initialize(void)
	{
		m_pDetailChart = m_pOwnerDlg->m_pGridppReport->ControlByName("DetailChart")->AsChart;
		
		m_pRecordset = m_pOwnerDlg->m_pGridppReport->DetailGrid->Recordset;

		m_pCategoryIDField = m_pOwnerDlg->m_pGridppReport->FieldByName("CategoryID");

		m_pDetailChart->SeriesCount = 1;
		m_pDetailChart->SeriesLabel[0] = "XX曲线";
	}

	virtual void CScatterChartEvent::FetchRecord(void)
	{
		for (unsigned int i=0;i<m_pOwnerDlg->m_AllInfo.size();i++)
		{
			m_pRecordset->Append();

			m_pCategoryIDField->Value=i;

			m_pRecordset->Post();
		}

	}

	//如果一个图表要多次输出,就应该在每次输出图表所对应的事件中为图表提供数据,在内容行中的图表应该在 ProcessRecord 事件中提供图表数据;
	//在分组头或分组尾中的图表应该分别在 GroupBegin 与 GroupEnd 事件中提供图表数据。
	//如果是在ProcessRecord、GroupBegin 或 GroupEnd 事件中提供图表数据,
	//在赋值之前必须调用图表的 PrepareSnapShort 方法,在赋值完成之后必须调用图表的 SnapShort方法。

	virtual void ProcessRecord(void) 
	{
		m_pDetailChart->PrepareSnapShot();
		m_pDetailChart->EmptyXYValue();

		list<LDIIP_TrigInfo>::iterator iter;
		int i=0;

		for(iter=m_pOwnerDlg->m_AllInfo[m_pOwnerDlg->m_Index].begin();iter!=m_pOwnerDlg->m_AllInfo[m_pOwnerDlg->m_Index].end();iter++)
		{
			//
			m_pDetailChart->AddXYValue(0, i, (*iter)._speed);
			i++;
		}

		m_pDetailChart->SnapShot();
	};

	CPrintSpeedGraphDlg *m_pOwnerDlg;
	IGRRecordsetPtr m_pRecordset;
	IGRChartPtr m_pDetailChart;
	IGRFieldPtr m_pCategoryIDField;
	IGRFieldPtr m_pCategoryNameField;
	IGRFieldPtr m_pAmtFields[12];
};


其中vector<list <TrigInfo>> m_AllInfo; 从外部将数据传入散列连线图;

 

你可能感兴趣的:(vs2008 MFC 对话框 grid++ report 使用经验总结)