Шаг 41 -Класс CDaoDialog

Первое что я сделаю, это немного исправлю функцию в классе навигаторе. Смысл такой, когда в навигатор передается набор записей, он проверяет, есть ли записи вообще. Если нет, то одну он создаст. Обновленный класс навигатора будет в проекте.

void CDaoNavigator::SetRecordset(CDaoRecordset *cRecord)
{
	m_pRecord=cRecord;
	if (m_pRecord->IsBOF() & m_pRecord->IsEOF())
	{
		m_pRecord->AddNew();		// новая 
		m_pRecord->Update();		// подтвердить
		m_pRecord->MoveLast();		// на последнею
	}
}

Для того, что бы не добавлять постоянно на диалог кнопки вперед назад лучше создать шаблон диалога. Как это сделать читайте "Шаг 359 - Свои шаблоны для диалога".

Пора создавать класс. Имя у него будет CDaoDialog. В примере объявления я оставлю самое главное.

#include "afxdao.h"
#include "DaoNavigator.h"

class CDaoDialog : public CDialog
{
// Construction
public:
	void Last();
	void First();
	void Prev();
	void Next();
	void SaveData();
	void SetRecorset(CDaoRecordset* m_pSet);
	CDaoDialog(int IDD,CWnd* pParent = NULL);	// standard constructor
	......
private:
	CDaoRecordset* m_pRecordset;
	CDaoNavigator cNavigator;
};

Обратите внимание, что у него уже есть свой класс навигатора. От объявлен в классе диалога. Для того, что бы объяснить навигатору, с чем мы имеем дело есть функция SetRecorset, которая передает набор записей навигатору и запоминает у себя.

void CDaoDialog::SetRecorset(CDaoRecordset *m_pSet)
{
	m_pRecordset=m_pSet;
	cNavigator.SetRecordset(m_pSet); 
}

Вот функции навигации и сохранение. Больше их не надо будет кодировать в диалогах.

void CDaoDialog::SaveData()
{
	if (!(m_pRecordset->IsEOF()))
	{ 
		m_pRecordset->Edit();		
		UpdateData(TRUE);		
		m_pRecordset->Update();		
	}
}

void CDaoDialog::Next()
{
	SaveData();
	cNavigator.OnButtonNext();
	UpdateData(FALSE);	   
}

void CDaoDialog::Prev()
{
	SaveData();
	cNavigator.OnButtonPrev(); 
	UpdateData(FALSE);	
}

void CDaoDialog::First()
{
	SaveData();
	cNavigator.OnButtonFirst(); 
	UpdateData(FALSE);
}

void CDaoDialog::Last()
{
	SaveData();
	cNavigator.OnButtonLast(); 
	UpdateData(FALSE);	
}

Изменен конструктор. Мы же не знаем, с каким диалогом будет работать этот класс. Вот и сделаем, что в конструкторе можно передать идентификатор диалога.

CDaoDialog::CDaoDialog(int IDD,CWnd* pParent /*=NULL*/)
	: CDialog(IDD, pParent)
{
	//{{AFX_DATA_INIT(CDaoDialog)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
}

Ну вот и все. Мы опять сняли часть работы по поводу создания диалогов и кодирования. В проекте находится класс CDaoNavigator и CDaoDialog упакованный для использования в Component Gallery как ogx файл.


Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 13.08.2001